• 模式说法之——装饰


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

     

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

     

            }

    结果:

     

    第一件事。听着音乐!

     

     

     

  • 相关阅读:
    C# json转对象
    sit、qas、dev、pet
    vs professional 2019 离线安装包下载方法
    C# SHA512和Base64加解密方法
    C#获取客户端Ip工具类
    C#xml泛型序列化
    C#对象转换工具类
    C#记录日志到本地文件工具类
    05 Activity生命周期
    05 利用Appliction 传值Activity
  • 原文地址:https://www.cnblogs.com/jams742003/p/1625730.html
Copyright © 2020-2023  润新知