Exemplo n.º 1
0
        //https://ru.wikipedia.org/wiki/Декоратор_(шаблон_проектирования)
        //https://refactoring.guru/ru/design-patterns/decorator
        //https://metanit.com/sharp/patterns/4.1.php

        static void Main(string[] args)
        {
            // Create ConcreteComponent and two Decorators
            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA dA = new ConcreteDecoratorA();
            ConcreteDecoratorB dB = new ConcreteDecoratorB();

            // Link decorators
            dA.SetComponent(c);
            dB.SetComponent(dA);

            dA.Operation();

            dB.Operation();

            //OnInterface
            Implement           implement = new Implement();
            ConcreteDecoratorAI dAI       = new ConcreteDecoratorAI();
            ConcreteDecoratorBI dBI       = new ConcreteDecoratorBI();

            // Link decorators
            dAI.SetComponent(implement);
            dBI.SetComponent(dAI);

            implement.Operation();

            dAI.Operation();

            dBI.Operation();

            // Wait for user
            Console.Read();
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            var client = new Client();

            // Клиент использует простой компонент
            var simple = new ConcreteComponent();

            Console.WriteLine("Client. ConcreteComponent:");
            client.Call(simple);
            Console.WriteLine();

            // Декораторы могут обёртывать не только
            // простые компоненты, но и другие декораторы.
            var decorator1 = new ConcreteDecoratorA(simple);

            Console.WriteLine("Client. ConcreteComponent in DecoratorA:");
            client.Call(decorator1);
            Console.WriteLine();

            var decorator2 = new ConcreteDecoratorB(decorator1);

            Console.WriteLine("Client. ConcreteComponent in Decorators A and B:");
            client.Call(decorator2);
            Console.WriteLine();
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            Component      component = new ConcreteComponent();
            DecoratorClass decorator = new ConcreteDecoratorA();

            decorator.SetComponent(component);

            decorator.Operation();
        }
Exemplo n.º 4
0
        static void Main(string[] args)
        {
            Component component = new ConcreteComponent();

            component = new ConcreteDecoratorA(component);
            component = new ConcreteDecoratorB(component);

            component.Operation();
        }
Exemplo n.º 5
0
        static void Main(string[] args)
        {
            Component component = new ConcreteComponent();
            Decorator decorA    = new ConcreteDecoratorA();
            Decorator decorB    = new ConcreteDecoratorB();

            decorA.component = component;
            decorB.component = decorA;
            decorB.Operation();
        }
Exemplo n.º 6
0
        static void Main(string[] args)
        {
            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            d1.setComponent(c);
            d2.setComponent(d1);
            d2.Operation();
        }
Exemplo n.º 7
0
        static void Main(string[] args)
        {
            Component myComponent = new ConcreteComponent();
            Console.WriteLine("CC: {0}", myComponent.Operation());

            myComponent = new ConcreteDecoratorA(myComponent);
            Console.WriteLine("CC + DCA: {0}", myComponent.Operation());

            myComponent = new ConcreteDecoratorB(myComponent);
            Console.WriteLine("CC + DCB: {0}", myComponent.Operation());
        }
Exemplo n.º 8
0
        private static void Main()
        {
            var component          = new ConcreteComponent();
            var concreteDecoratorA = new ConcreteDecoratorA();
            var concreteDecoratorB = new ConcreteDecoratorB();

            concreteDecoratorA.SetComponent(component);
            concreteDecoratorB.SetComponent(concreteDecoratorA);
            concreteDecoratorB.Operation();

            Console.ReadKey();
        }
Exemplo n.º 9
0
        private static void NewMethod2()
        {
            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            d1.SetComponent(c);
            d2.SetComponent(d1);
            d2.Operation();

            Console.Read();
        }
Exemplo n.º 10
0
        static void Main(string[] args)
        {
            var compo      = new ConcreteComponent();
            var decorator1 = new ConcreteDecoratorA(compo);
            var decorator2 = new ConcreteDecoratorB(compo);
            var decorator3 = new ConcreteDecoratorA(new ConcreteDecoratorB(compo));

            compo.Operation();
            decorator1.Operation();
            decorator2.Operation();
            decorator3.Operation();
        }
Exemplo n.º 11
0
        static void Main()
        {
            ConcreteComponent c = new ConcreteComponent();
            ConcreteDecoratorA dA = new ConcreteDecoratorA();
            ConcreteDecoratorB dB = new ConcreteDecoratorB();

            dA.SetComponent(c);
            dB.SetComponent(dA);

            dB.Operation();

            Console.Read();
        }
Exemplo n.º 12
0
        static void Main(string[] args)
        {
            // Create ConcreteComponent and two Decorators
            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            // Link decorators
            d1.SetComponent(c);
            d2.SetComponent(d1);
            d2.Operation();
            // Wait for user
            Console.ReadKey();
        }
        static void Main()
        {
            ConcreteComponent  cmp = new ConcreteComponent();
            ConcreteDecoratorA d1  = new ConcreteDecoratorA();
            ConcreteDecoratorB d2  = new ConcreteDecoratorB();

            d1.SetComponent(cmp);
            d2.SetComponent(cmp);

            d1.Operation();
            d2.Operation();

            Console.ReadKey();
        }
Exemplo n.º 14
0
        static void Main(string[] args)
        {
            Component component = new ConcreteComponent("Start");

            Console.WriteLine(component.Operation());

            component = new ConcreteDecoratorA(component);
            Console.WriteLine(component.Operation());

            component = new ConcreteDecoratorB(component);
            Console.WriteLine(component.Operation());

            Console.ReadLine();
        }
        /// <summary>
        /// The test first decorator.
        /// </summary>
        private static void TestFirstDecorator()
        {
            // Create ConcreteComponent and two Decorators
            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            // Link decorators
            d1.SetComponent(c);
            d2.SetComponent(d1);
            d2.Operation();

            // Wait for user
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            var client = new Client();
            var simple = new ConcreteComponent();

            System.Console.WriteLine("Client: I get a simple component");
            client.ClientCode(simple);
            System.Console.WriteLine();

            var decorator1 = new ConcreteDecoratorA(simple);
            var decorator2 = new ConcreteDecoratorB(decorator1);

            System.Console.WriteLine("Client: Now I've got a decorated component: ");
            client.ClientCode(decorator2);
        }
Exemplo n.º 17
0
        static void Main(string[] args)
        {
            Client            client          = new Client();
            ConcreteComponent simpleComponent = new ConcreteComponent();

            client.ClientCode(simpleComponent);

            ConcreteDecoratorA decoratorA = new ConcreteDecoratorA(simpleComponent);

            client.ClientCode(decoratorA);

            ConcreteDecoratorB decoratorB = new ConcreteDecoratorB(decoratorA);

            client.ClientCode(decoratorB);
        }
Exemplo n.º 18
0
        /// <summary>
        /// Entry point into console application.
        /// </summary>
        static void Main()
        {
            // Create ConcreteComponent and two Decorators
            ConcreteComponent c = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            // Link decorators
            d1.SetComponent(c);
            d2.SetComponent(d1);

            d2.Operation();

            // Wait for user
            Console.ReadKey();
        }
Exemplo n.º 19
0
    { /// <summary>
      /// Entry point into console application.
      /// </summary>
        static void Main()
        {
            // Create ConcreteComponent and two Decorators
            var c  = new ConcreteComponent();
            var d1 = new ConcreteDecoratorA();
            var d2 = new ConcreteDecoratorB();

            // Link decorators
            d1.SetComponent(c);
            d2.SetComponent(d1);

            d2.Operation();

            // Wait for user
            Console.ReadKey();
        }
Exemplo n.º 20
0
        static void Main()
        {
            ConcreteComponent
                c = new ConcreteComponent();

            ConcreteDecoratorA
                d1 = new ConcreteDecoratorA();

            ConcreteDecoratorB
                d2 = new ConcreteDecoratorB();

            // Link decorators
            d1.SetComponent(c);
            d2.SetComponent(d1);

            d2.Operation();
        }
Exemplo n.º 21
0
        static void Main()
        {
            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA dA = new ConcreteDecoratorA();
            ConcreteDecoratorB dB = new ConcreteDecoratorB();

            dA.SetComponent(c);
            dB.SetComponent(dA);

            dA.Operation();

            Console.WriteLine();

            dB.Operation();

            Console.Read();
        }
Exemplo n.º 22
0
        static void Main(string[] args)
        {
            ConcreteComponent concreteComponent = new ConcreteComponent();

            concreteComponent.Operation();

            ConcreteDecoratorA decoratorA = new ConcreteDecoratorA();

            decoratorA.SetComponent(concreteComponent);
            ConcreteDecoratorB decoratorB = new ConcreteDecoratorB();

            decoratorB.SetComponent(concreteComponent);

            decoratorA.Operation();
            decoratorB.Operation();


            Console.WriteLine("-----------------------------");

            Repo repo = new Repo();

            repo.GetId();

            DecoratorForIRepo decoratorForIRepo = new DecoratorForIRepo(repo);

            decoratorForIRepo.GetId();

            Console.WriteLine("-----------------------------");

            new CofeeHelper().ShouldSupportCondiments();


            Console.WriteLine("-----------------------------");


            BaseCar baseCar = new BaseCar();

            Console.WriteLine(baseCar.GetCarCharacteristic());
            Console.WriteLine(baseCar.GetCost());

            ICarSet superCar = new AutomaticTransmissionSet(baseCar);

            Console.WriteLine(superCar.GetCarCharacteristic());
            Console.WriteLine(superCar.GetCost());
        }
Exemplo n.º 23
0
        static void Main(string[] args)
        {
            Client client = new Client();

            var simple = new ConcreteComponent();

            Console.WriteLine("Client: I get a simple component:");
            client.ClientCode(simple);
            Console.WriteLine();

            //.. as well as decorated ones.
            //Note how decorators can wrap only simple components but the other decorators as well.
            ConcreteDecoratorA decorator1 = new ConcreteDecoratorA(simple);
            ConcreteDecoratorB decorator2 = new ConcreteDecoratorB(decorator1);

            Console.WriteLine("Client: Now I've got a decorator component:");
            client.ClientCode(decorator2);
        }
Exemplo n.º 24
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            // Decorator
            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            // 先用ConcreteComponent实例化对象c
            // 然后用ConcreteComponentA的实例化对象d1包装c
            d1.SetComponent(c);
            // 再用ConcreteComponentB的实例化对象d2包装d1
            d2.SetComponent(d1);
            //最终执行d2的Operation()
            d2.Operation();

            Console.Read();
        }
        static void Main(string[] args)
        {
            // Se crea ConcreteComponent y 2 Decoradores

            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            // Se liga los decoradores

            d1.SetComponent(c);
            d2.SetComponent(d1);

            d2.Operation();

            // Espera al usuario

            Console.ReadKey();
        }
Exemplo n.º 26
0
        public static void Run()
        {
            Console.WriteLine("This structural code demonstrates the Decorator pattern which dynamically adds extra functionality to an existing object.");

            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            d1.SetComponent(c);
            d2.SetComponent(d1);

            d2.Operation();

            /*
             * ConcreteComponent.Operation()
             * ConcreteDecoratorA.Operation()
             * ConcreteDecoratorB.Operation()
             */
        }
Exemplo n.º 27
0
        static void Main()
        {
            /*
             * Structural
             */

            // Create ConcreteComponent and two Decorators
            StructuralConcreteComponent c  = new StructuralConcreteComponent();
            ConcreteDecoratorA          d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB          d2 = new ConcreteDecoratorB();

            // Link Decorators
            d1.SetComponent(c);
            d2.SetComponent(d1);

            // Call decorators operation
            d2.Operation();

            /*
             * Real World
             */

            // Create a book
            Book book = new Book("Cantu, Jeremy", "My Life as a Person", 12345);

            book.Display();

            // Create a video
            Video video = new Video("Tarantino, Quentin", "Jeremy's Life", 54321, 60);

            video.Display();

            // Make video borrow-able, then borrow and display
            Console.WriteLine("Making video borrow-able");

            Borrowable borrowableVideo = new Borrowable(video);

            borrowableVideo.BorrowItem("Customer #1");
            borrowableVideo.BorrowItem("Customer #2");

            borrowableVideo.Display();
        }
Exemplo n.º 28
0
        static public void Main()
        {
            //正常情况下,具体做X事。
            ConcretComponent cc = new ConcretComponent();

            cc.DoSth();

            //现在想让组件类,除了能做X事,还能做A事。
            //此时不用修改这个组件类。
            //而是将其放入具体装饰器(或称为“包装器”更贴切)中。
            ConcreteDecoratorA cdA = new ConcreteDecoratorA(cc);
            ConcreteDecoratorB cdB = new ConcreteDecoratorB(cc);
            ConcreteDecoratorB cdC = new ConcreteDecoratorB(cc);

            cdA.DoSth();    //既能干X、又能干A
            cdB.DoSth();    //既能干X、又能干B
            cdC.DoSth();    //既能干X、又能干C

            //------------------------------------------------------------------
            //除了上边那样简单的单层装饰,还能进行任意组合的装饰

            new ConcreteDecoratorB(cdA).DoSth();                         //既能干X、又能干A、又能干B
            new ConcreteDecoratorA(cdB).DoSth();                         //同上,顺序变化

            new ConcreteDecoratorC(cdA).DoSth();                         //既能干X、又能干A、又能干C
            new ConcreteDecoratorA(cdC).DoSth();                         //同上,顺序变化

            new ConcreteDecoratorC(cdB).DoSth();                         //既能干X、又能干B、又能干C
            new ConcreteDecoratorB(cdC).DoSth();                         //同上,顺序变化

            new ConcreteDecoratorA(new ConcreteDecoratorB(cdC)).DoSth(); //既能干X、又能干A、又能干B、又能干C
            new ConcreteDecoratorA(new ConcreteDecoratorC(cdB)).DoSth(); //同上,顺序变化
            new ConcreteDecoratorB(new ConcreteDecoratorA(cdC)).DoSth(); //同上,顺序变化
            new ConcreteDecoratorB(new ConcreteDecoratorC(cdA)).DoSth(); //同上,顺序变化
            new ConcreteDecoratorC(new ConcreteDecoratorA(cdB)).DoSth(); //同上,顺序变化
            new ConcreteDecoratorA(new ConcreteDecoratorB(cdA)).DoSth(); //同上,顺序变化

            //------------------------------------------------------------------
            //甚至可以同方法多次装饰
            new ConcreteDecoratorA(cdA).DoSth();
            new ConcreteDecoratorA(new ConcreteDecoratorA(cdA)).DoSth();
        }
Exemplo n.º 29
0
        static void Main()
        {
            // Create ConcreteComponent and two Decorators
            ConcreteComponent c = new ConcreteComponent();
            ConcreteDecoratorA dA = new ConcreteDecoratorA();
            ConcreteDecoratorB dB = new ConcreteDecoratorB();

            // Link decorators
            dA.SetComponent(c);
            dB.SetComponent(dA);

            dA.Operation();

            Console.WriteLine();

            dB.Operation();

            // Wait for user
            Console.Read();
        }
Exemplo n.º 30
0
        static void Main(string[] args)
        {
            ConcreteComponent cc = new ConcreteComponent();

            cc.Operation();
            Console.WriteLine();

            ConcreteDecoratorA cd1 = new ConcreteDecoratorA(cc);

            cd1.Operation();
            Console.WriteLine();

            ConcreteDecoratorB cd2 = new ConcreteDecoratorB(cc);

            cd2.Operation();
            Console.WriteLine();


            Console.ReadKey();
        }
Exemplo n.º 31
0
        static void Main()
        {
            // Create ConcreteComponent and two Decorators
            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA dA = new ConcreteDecoratorA();
            ConcreteDecoratorB dB = new ConcreteDecoratorB();

            // Link decorators
            dA.SetComponent(c);
            dB.SetComponent(dA);

            dA.Operation();

            Console.WriteLine();

            dB.Operation();

            // Wait for user
            Console.Read();
        }
Exemplo n.º 32
0
        static void Main(string[] args)
        {
            #region 基本用法(对应Basic.cs)
            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            d1.SetComponent(c);
            d2.SetComponent(d1);

            d2.Operation();
            #endregion

            #region 具体实例(对应Example.cs)
            Person xc = new Person("小菜");
            Console.WriteLine("\n第一种装扮:");

            Sneaker    pqx = new Sneaker();
            BigTrouser kk  = new BigTrouser();
            TShirt     dtx = new TShirt();

            pqx.Decorate(xc);
            kk.Decorate(pqx);
            dtx.Decorate(kk);
            dtx.Show();

            Console.WriteLine("\n第二种装扮:");

            LeatherShoes px = new LeatherShoes();
            Tie          ld = new Tie();
            Suit         xz = new Suit();

            px.Decorate(xc);
            ld.Decorate(px);
            xz.Decorate(ld);
            xz.Show();

            Console.ReadLine();
            #endregion
        }
Exemplo n.º 33
0
        static void Main(string[] args)
        {
            #region 基本用法(对应Basic.cs)
            ConcreteComponent c = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            d1.SetComponent(c);
            d2.SetComponent(d1);

            d2.Operation();
            #endregion

            #region 具体实例(对应Example.cs)
            Person xc = new Person("小菜");
            Console.WriteLine("\n第一种装扮:");

            Sneaker pqx = new Sneaker();
            BigTrouser kk = new BigTrouser();
            TShirt dtx = new TShirt();

            pqx.Decorate(xc);
            kk.Decorate(pqx);
            dtx.Decorate(kk);
            dtx.Show();

            Console.WriteLine("\n第二种装扮:");

            LeatherShoes px = new LeatherShoes();
            Tie ld = new Tie();
            Suit xz = new Suit();

            px.Decorate(xc);
            ld.Decorate(px);
            xz.Decorate(ld);
            xz.Show();

            Console.ReadLine();
            #endregion
        }
Exemplo n.º 34
0
        static void Main(string[] args)
        {
            #region 结构实现
            // Create ConcreteComponent and two Decorators
            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            // Link decorators
            d1.SetComponent(c);
            d2.SetComponent(d1);

            d2.Operation();
            #endregion

            Console.WriteLine("******************************");

            #region 实践应用
            #endregion

            Console.ReadKey();
        }
Exemplo n.º 35
0
        static void Main(string[] args)
        {
            var c  = new ConcreteComponent();
            var d1 = new ConcreteDecoratorA();
            var d2 = new ConcreteDecoratorB();

            d1.SetComponent(c);
            d2.SetComponent(d1);
            d2.Operation();

            //範例
            Person xc = new Person("小菜");

            Console.WriteLine("第一種裝扮");
            var kk  = new BigTrouser();
            var dtx = new TShirts();

            kk.Decorate(xc);
            dtx.Decorate(kk);
            dtx.Show();

            Console.ReadLine();
        }