예제 #1
0
        private static void ShowDecorator()
        {
            Console.WriteLine("================================================");
            Console.WriteLine("Pattern code (Decorator):");
            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

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

            d2.Operation();

            Console.WriteLine("\nReal code (Decorator):");

            Pizza pizza1 = new ItalianPizza();

            pizza1 = new TomatoPizza(pizza1); // итальянская пицца с томатами
            Console.WriteLine("Название: {0}", pizza1.Name);
            Console.WriteLine("Цена: {0}", pizza1.GetCost());

            Pizza pizza2 = new ItalianPizza();

            pizza2 = new CheesePizza(pizza2);// итальянская пиццы с сыром
            Console.WriteLine("Название: {0}", pizza2.Name);
            Console.WriteLine("Цена: {0}", pizza2.GetCost());

            Pizza pizza3 = new BulgerianPizza();

            pizza3 = new TomatoPizza(pizza3);
            pizza3 = new CheesePizza(pizza3);// болгарская пиццы с томатами и сыром
            Console.WriteLine("Название: {0}", pizza3.Name);
            Console.WriteLine("Цена: {0}", pizza3.GetCost());
        }
예제 #2
0
        static void DecoratorTester()
        {
            #region sample 1
            var c  = new ConcreteComponent();
            var d1 = new ConcreteDecoratorA();
            var d2 = new ConcreteDecoratorB();

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

            d2.Operation();

            #endregion


            #region sample 2
            var book = new Book("Worley", "Inside ASP.NET", 10);
            book.Display();

            // Create video
            var video = new Video("Spielberg", "Jaws", 23, 92);
            video.Display();

            // Make video borrowable, then borrow and display
            Console.WriteLine("\nMaking video borrowable:");

            var borrowvideo = new Borrowable(video);
            borrowvideo.BorrowItem("Customer #1");
            borrowvideo.BorrowItem("Customer #2");

            borrowvideo.Display();
            #endregion
        }
예제 #3
0
        static bool TestDecoratorPattern()
        {
            Console.WriteLine("TESTING THE DECORATOR DESIGN PATTERN: ");

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

            comp.Operation();
            //Output:
            //Operation from ConcreteComponent

            d1.Operation();
            //Output:
            //Operation from ConcreteComponent
            //(AddedBehaviour A) + Operation from ConcreteDecoratorA

            d2.Operation();
            //Output:
            //Operation from ConcreteComponent
            //(AddedBehaviour A) + Operation from ConcreteDecoratorA
            //(AddedBehaviour B) + Operation from ConcreteDecoratorB

            return(true);
        }
예제 #4
0
    public static void Main(string[] args)
    {
        Component obj    = new ConcreteDecoratorB(new ConcreteDecoratorA(new ConcreteComponent()));
        string    result = obj.operation();

        Console.WriteLine(result);
    }
예제 #5
0
        public void AddBehaviorTest()
        {
            Component component = new ConcreteComponent();

            component = new ConcreteDecoratorB(component);

            Assert.That(() => component.Operation(),
                        Throws.Exception.With.Message.EqualTo("Operation from object of ConcreteDecoratorB type"));
        }
예제 #6
0
    static void Main()
    {
        ConcreteComponent  c  = new ConcreteComponent();
        ConcreteDecoratorA d1 = new ConcreteDecoratorA(c);
        ConcreteDecoratorB d2 = new ConcreteDecoratorB(d1);

        d2.Operation();
        Console.ReadKey();
    }
예제 #7
0
        static void Main()
        {
            Component component  = new ConcreteComponent();
            Decorator decoratorA = new ConcreteDecoratorA();
            Decorator decoratorB = new ConcreteDecoratorB();

            decoratorA.Component = component;
            decoratorB.Component = decoratorA;
            decoratorB.Operation();
        }
예제 #8
0
파일: Program.cs 프로젝트: xiongfj/Backup
    public 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();
    }
예제 #9
0
        public static void TestConcreteDecorators()
        {
            var c  = new ConcreteComponent();
            var d1 = new ConcreteDecoratorA();
            var d2 = new ConcreteDecoratorB();

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

            StringAssert.AreEqualIgnoringCase(d2.Operation(true), "ConcreteDecoratorB.Operation()ConcreteDecoratorA.Operation()ConcreteComponent.Operation()");
        }
예제 #10
0
        public static void DecoratorPattern()
        {
            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            d1.SetComponent(c);
            d2.SetComponent(d1);
            d2.Operation();
            Console.Read();
        }
예제 #11
0
        public static void TestDecorator()
        {
            IComponent component = new ConcreteComponent();

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

            Console.WriteLine(decorator.Operation());
            decorator = new ConcreteDecoratorB(decorator);
            Console.WriteLine(decorator.Operation());
        }
예제 #12
0
        public void TestDecorator()
        {
            ConcreteComponent  c  = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

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

            d2.Operation();
        }
예제 #13
0
        static void Main(string[] args)
        {
            ConcreteComponent TextView = new ConcreteComponent();
            ConcreteDecoratorA ScrollDecorator = new ConcreteDecoratorA();
            ConcreteDecoratorB BorderDecorator = new ConcreteDecoratorB();

            ScrollDecorator.SetComponent(TextView);
            BorderDecorator.SetComponent(ScrollDecorator);
            BorderDecorator.Operation();

            Console.ReadLine();
        }
예제 #14
0
        static void Main(string[] args)
        {
            ConcreteComponent  component = new ConcreteComponent();
            ConcreteDecoratorA da        = new ConcreteDecoratorA();
            ConcreteDecoratorB db        = new ConcreteDecoratorB();

            da.SetComponent(component);
            db.SetComponent(da);
            db.Operation();

            Console.ReadKey(true);
        }
예제 #15
0
        static void Main(string[] args)
        {
            ConcreteComponent  concreteComponent  = new ConcreteComponent();
            ConcreteDecoratorA concreteDecoratorA = new ConcreteDecoratorA();
            ConcreteDecoratorB concreteDecoratorB = new ConcreteDecoratorB();

            concreteDecoratorA.Component = concreteComponent;
            concreteDecoratorB.Component = concreteDecoratorA;

            concreteDecoratorB.Operation();

            Console.Read();
        }
예제 #16
0
        public static void DecoratorStructural()
        {
            // 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();
        }
        static void Main()
        {
            {
                ConcreteComponent c = new ConcreteComponent();
                ConcreteDecoratorA d1 = new ConcreteDecoratorA();
                ConcreteDecoratorB d2 = new ConcreteDecoratorB();

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

                d2.Operation();
            }
        }
            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();
                Console.ReadKey();
            }
예제 #19
0
        public Client()
        {
            ConcreteComponent concreteComponent = new ConcreteComponent();

            ConcreteDecoratorA concreteDecoratorA = new ConcreteDecoratorA();
            ConcreteDecoratorB concreteDecoratorB = new ConcreteDecoratorB();


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

            Console.Read();
        }
예제 #20
0
        public void DecoratorTest()
        {
            var simple = new ConcreteComponent();

            Client.ClientCode(simple).Should().Be(StructuralText.ConcreteComponent);

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

            Client.ClientCode(decorator2).Should().Be(StructuralText.ConcreteDecoratorB +
                                                      StructuralText.ConcreteDecoratorA +
                                                      StructuralText.ConcreteComponent);
        }
예제 #21
0
        static void Main(string[] args)
        {
            Component component = new ConcreteComponent();

            Abstraction.Decorator decoratorA = new ConcreteDecoratorA();
            Abstraction.Decorator decoratorB = new ConcreteDecoratorB();

            decoratorA.Component = component;
            decoratorB.Component = decoratorA;

            decoratorB.Operation();

            Console.ReadKey();
        }
예제 #22
0
            private static void Test()
            {
                var c  = new ConcreteComponent();
                var d1 = new ConcreteDecoratorA();
                var d2 = new ConcreteDecoratorB();

                //Tutaj widac dekoracje
                d1.SetComponent(c);
                d2.SetComponent(d1);

                d2.Operation();

                Console.ReadKey();
            }
예제 #23
0
        public static void Create()
        {
            var c  = new ConcreteComponent();
            var d1 = new ConcreteDecoratorA();
            var d2 = new ConcreteDecoratorB();

            // Link decorators.
            d1.Component = c;
            d2.Component = d1;

            // Do the operation.

            d2.Operation();
        }
예제 #24
0
        private static void Test1()
        {
            // 首先实例化具体对象ConcreateComponent 【具体组合】
            ConcreateComponent c = new ConcreateComponent();

            // 然后实例化具体装饰类
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

            // 开始包装
            d1.SetComponent(c);
            d2.SetComponent(d1);
            d2.Operation();
        }
예제 #25
0
        /// <summary>
        /// Execute decorator design pattern example
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Decorator_OnClick(object sender, RoutedEventArgs e)
        {
            var simpleComponent = new ConcreteComponent();

            DesignPatternsLog.Text += $"Decorator@ I get a simple component: {simpleComponent.Operation()}";
            DesignPatternsLog.Text += $"{Environment.NewLine}";

            // Note how decorators can wrap not only simple components
            // but the other decorators as well.
            var decoratorA = new ConcreteDecoratorA(simpleComponent);
            var decoratorB = new ConcreteDecoratorB(decoratorA);

            DesignPatternsLog.Text += $"Decorator@ Now I've got a decorated component: {decoratorB.Operation()}";
            DesignPatternsLog.Text += $"{Environment.NewLine}";
        }
예제 #26
0
        static void Run()
        {
            //实例化实现类
            ConcreteComponent concrete = new ConcreteComponent();
            //实例化装饰类
            ConcreteDecoratorA decoratorA = new ConcreteDecoratorA();
            ConcreteDecoratorB decoratorB = new ConcreteDecoratorB();

            //用装饰类装饰实现类
            decoratorA.SetComponent(concrete);
            decoratorB.SetComponent(decoratorA);

            //
            decoratorB.Operation();
        }
예제 #27
0
        // "Component"
        public void TestDecoratorPattern()
        {
            // 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.Read();
        }
예제 #28
0
	// 
	void UnitTest () {

		// 物件
		ConcreteComponent theComponent = new ConcreteComponent();

		// 增加Decorator
		ConcreteDecoratorA theDecoratorA = new ConcreteDecoratorA( theComponent );
		theDecoratorA.Operator();

		ConcreteDecoratorB theDecoratorB = new ConcreteDecoratorB( theComponent );
		theDecoratorB.Operator();

		// 再增加一層
		ConcreteDecoratorB theDecoratorB2 = new ConcreteDecoratorB( theDecoratorA );
		theDecoratorB2.Operator();
	}
예제 #29
0
        static void Main(string[] args)
        {
            Client client = new Client();

            var simple = new ConcreteComponent();

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

            ConcreteDecoratorA d1 = new ConcreteDecoratorA(simple);
            ConcreteDecoratorB d2 = new ConcreteDecoratorB(d1);

            Console.WriteLine("Client: Now I get a decorated component:");
            client.ClientCode(d2);
        }
예제 #30
0
        private static void DoDecorator()
        {
            DecoratorClient client = new DecoratorClient();

            ConcreteComponent simple = new ConcreteComponent();

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

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

            Console.WriteLine("Client: Now I've got decorated component");
            client.ClientCode(decorator2);
        }
예제 #31
0
        static void Main(string[] args)
        {
            Component component = new ConcreteComponent();

            //第一次修饰
            component = new ConcreteDecoratorA(component);
            //第二次装饰
            component = new ConcreteDecoratorB(component);

            component.Operation();

            //Person p = new Person("sun");
            //Shirt t  = new Shirt();
            //t.Decorate(p);
            //t.Show();
            Console.ReadLine();
        }
예제 #32
0
        //Декоратор або Wrapper / Обгортка (Decorator)
        public Run Decorator()
        {
            Console.WriteLine("\nDecorator:");

            // 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();

            return(this);
        }
예제 #33
0
        public void Test1()
        {
            Client client = new Client();

            var simple = new ConcreteComponent();

            var resultS = client.ClientCode(simple);

            Assert.Equal("RESULT: ConcreteComponent", resultS);

            ConcreteDecoratorA decorator1 = new ConcreteDecoratorA(simple);

            ConcreteDecoratorB decorator2 = new ConcreteDecoratorB(decorator1);

            var resultD2 = client.ClientCode(decorator2);

            Assert.Equal("RESULT: ConcreteDecoratorB(ConcreteDecoratorA(ConcreteComponent))", resultD2);
        }
예제 #34
0
    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.Read();
    }
예제 #35
0
  public 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();

  }