• 模式说法之——装饰


    我们通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。

     

    动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。

     

     

     

    (一)代码

    public abstract class Component

        {

            public abstract void Do1();

            public abstract void Do2();

        }

     

        public class ConcreteComponent : Component

        {

            public override void Do1()

            {

                Console.WriteLine("第一件事。");

            }

     

            public override void Do2()

            {

                Console.WriteLine("第二件事。");

            }

        }

     

        public abstract class Decorator : Component

        {

            Component _component;

     

            public Decorator(Component component)

            {

                _component = component;

            }

     

     

            public override void Do1()

            {

                _component.Do1();

            }

     

            public override void Do2()

            {

                _component.Do2();

            }

        }

     

        public class ConcreteDecorator1 : Decorator

        {

            public ConcreteDecorator1(Component component):base(component)

            {

           

            }

     

            public override void Do1()

            {

                base.Do1();

                Console.WriteLine("听着音乐!");

            }

        }

     

        public class ConcreteDecorator2: Decorator

        {

            public ConcreteDecorator2(Component component)

                : base(component)

            {

     

            }

     

            public override void Do2()

            {

                base.Do1();

                Console.WriteLine("吃着零食!");

            }

        }

    (二)测试

    [Test]

            public void TestDecorator()

            {

                Component c1 = new ConcreteComponent();

     

                Decorator.Decorator d = new ConcreteDecorator1(c1);

     

                d.Do1();

     

            }

    结果:

     

    第一件事。听着音乐!

     

     

     

  • 相关阅读:
    easy Html5 Jquery Mobile之ToolBars(Header and Footer)
    Windows Phone7 性能
    easy Html5 Jquery Mobile之Buttons
    开篇,从这里开始。
    SkyDrive APIs——用户登录和APP授权(2)
    Windows Phone的强大语音控制,让你的Phone大秀一把
    SkyDrive APIs之——操作文件和文件夹(3)
    Mango in my mind 之 Live Tile
    SkyDrive APIs——搭建环境(1)
    windows10安装redis
  • 原文地址:https://www.cnblogs.com/jams742003/p/1625730.html
Copyright © 2020-2023  润新知