public Client()
        {
            Component component = new ConcreateComponent();

            component = new ConcreateDecoratorA(component);
            component = new ConcreateDecoratorB(component);

            component.Operation();
        }
Exemplo n.º 2
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();
        }
Exemplo n.º 3
0
        /// <summary>
        /// (1)需要扩展一个类的功能、或者给一个类添加附加的职责时。
        /// (2)需要动态的给一个对象添加功能,这些功能可以再动态的撤销时。
        /// (3)需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。
        /// (4)当不能采用生成子类的方式进行扩充时。
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            IComponent          component  = new ConcreateComponent("XiaoMing");
            ConcreateDecoratorA decoratorA = new ConcreateDecoratorA();

            decoratorA.decorator(component);

            ConcreateDecoratorB decoratorB = new ConcreateDecoratorB();

            decoratorB.decorator(decoratorA);

            decoratorB.Show("test");

            //IComponent component = new ConcreateDecoratorA(new ConcreateComponent("XiaoMing"));
            //ConcreateDecoratorA decoratorA = new ConcreateDecoratorA();
            //decoratorA.SetComponent(component);
            component.Show("decorator demo.");
            Console.ReadLine();
        }
Exemplo n.º 4
0
        static void Main(string[] args)
        {
            //装饰者
            ConcreateComponent  c  = new ConcreateComponent();
            ConcreateDecoratorA ca = new ConcreateDecoratorA();
            ConcreateDecoratorB cb = new ConcreateDecoratorB();

            ca.SetComponent(c);
            cb.SetComponent(ca);
            cb.Operation();

            Console.WriteLine("----------------------------------\r\n");

            Person.Person     person = new Person.Person("微软");
            Person.BigTrouser bt     = new Person.BigTrouser();
            Person.TShirts    ts     = new Person.TShirts();

            bt.Decorate(person);
            ts.Decorate(bt);
            ts.Show();

            Console.Read();
        }