Decorator Pattern

Und auf zur nächten Runde, heute geht es um das erweitern sprich das Dekorieren.

using System;

namespace DecoratorDesignPattern
{
    enum PcHersteller
    {
        Acer,
        Dell,
        Hp,
        Lenovo
    }

    public interface IHersteller
    {
        void PcHersteller();
    }
    class Acer : IHersteller
    {
        public void PcHersteller()
        {
            Console.WriteLine("Ich komme von Acer");
        }
    }
    class AcerGamer : IHersteller
    {
        public void PcHersteller()
        {
            Console.WriteLine("\t und bin ein Highend GamerPc");
        }
    }

    class Lenovo : IHersteller
    {
        public void PcHersteller()
        {
            Console.WriteLine("Ich komme von Lenovo");
        }
    }
    class LenovoGamer : IHersteller
    {
        public void PcHersteller()
        {
            Console.WriteLine("\t und bin ein kleiner GamerPc");
        }
    }

    class Dell : IHersteller
    {
        public void PcHersteller()
        {
            Console.WriteLine("Ich komme von Dell");
        }
    }
    class DellGamer : IHersteller
    {
        public void PcHersteller()
        {
            Console.WriteLine("\t und bin ein Alienware");
        }
    }

    class HP : IHersteller
    {
        public void PcHersteller()
        {
            Console.WriteLine("Ich komme von HP");
        }
    }
    class HPGamer : IHersteller
    {
        public void PcHersteller()
        {
            Console.WriteLine("\t und bin ein GamerPc");
        }
    }

    class PcFactory
    {
        public virtual IHersteller MeinPc(PcHersteller Key)
        {
            switch (Key)
            {
                case PcHersteller.Acer:
                    return new Acer();
                case PcHersteller.Dell:
                    return new Dell();
                case PcHersteller.Hp:
                    return new HP();
                case PcHersteller.Lenovo:
                    return new Lenovo();
                default:
                    return null;
            }
        }
    }

    class GamerPcFactory : PcFactory
    {
        public override  IHersteller MeinPc(PcHersteller Key)
        {
            base.MeinPc(Key).PcHersteller();
            switch (Key)
            {
                case PcHersteller.Acer:
                    return new AcerGamer();
                case PcHersteller.Dell:
                    return new DellGamer  ();
                case PcHersteller.Hp:
                    return new HPGamer();
                case PcHersteller.Lenovo:
                    return new LenovoGamer();
                default:
                    return null;
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            PcFactory fClass = new PcFactory();

            //IHersteller obj =  fClass.MeinPc(PcHersteller.Acer);
            //obj.PcHersteller();

            //obj = fClass.MeinPc(PcHersteller.Dell);
            //obj.PcHersteller();

            //obj = fClass.MeinPc(PcHersteller.Hp);
            //obj.PcHersteller();

            //obj = fClass.MeinPc(PcHersteller.Lenovo);
            //obj.PcHersteller();

            PcFactory fGamerClass = new GamerPcFactory();

            IHersteller objGamer = fGamerClass.MeinPc(PcHersteller.Acer);
            objGamer.PcHersteller();

            objGamer = fGamerClass.MeinPc(PcHersteller.Dell);
            objGamer.PcHersteller();

            objGamer = fGamerClass.MeinPc(PcHersteller.Hp);
            objGamer.PcHersteller();

            objGamer = fGamerClass.MeinPc(PcHersteller.Lenovo);
            objGamer.PcHersteller();

            Console.ReadLine();
        }
    }
}

 

Kommentare sind geschlossen