zoukankan      html  css  js  c++  java
  • 模式说法之——装饰

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

     

    动态地给一个对象添加一些额外的职责。就增加功能来说,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();

     

            }

    结果:

     

    第一件事。听着音乐!

     

     

     

  • 相关阅读:
    实用工具分享
    美国西储大学轴承数据解读
    CSDN去广告插件
    [教程]SPSS for Mac 安装教程
    [教程]Ubuntu 安装 Docker CE
    [教程]Windows操作系统下安装Ubuntu虚拟机
    Chrome视频解析插件
    [软件]MATLAB小波包的分解与重构
    [信号处理]奈奎斯特采样定理
    [软件]LabVIEW编程实例:如何通过TCP协议进行数据通信
  • 原文地址:https://www.cnblogs.com/jams742003/p/1625730.html
Copyright © 2011-2022 走看看