zoukankan      html  css  js  c++  java
  • 装饰者模式

    装饰者模式
    需要把所需的功能按照正确的顺序串联起来进行控制,动态的给一个对象添加一些额外的职责。
    装饰模式是利用SetComponent来对对象进行包装的,每一个装饰对象只需关心自己的功能,不需要关心如何被添加到对象链中。
    装饰模式是为已有功能动态添加其他功能的一种方式,优点是把类中的装饰功能从类中搬移,简化原有类,有效的把核心职责和装饰职责功能区分开来。

    调用装饰模式的主函数:

            static void Main(string[] args)
            {
                ConcreteComponent c = new ConcreteComponent();//核心功能类
                ConcreteDecoratorA d1 = new ConcreteDecoratorA();//装饰类1
                ConcreteDecoratorB d2 = new ConcreteDecoratorB();//装饰类2
                d1.SetComponent(c);
                d2.SetComponent(d1);
                d2.Opration();//会执行核心功能类+装饰类1+装饰类2
                Console.ReadKey();
            }

    核心功能类和装饰类继承的抽象类Component:

        public abstract class Component
        {
            public abstract void Opration();
        }

     核心类ConcreteComponent :

        public class ConcreteComponent : Component
        {
            public override void Opration()
            {
                Console.WriteLine("ConcreteComponent类的操作");
            }
        }
    装饰模式是利用SetComponent来对对象进行包装的,每一个装饰对象只需关心自己的功能,不需要关心如何被添加到对象链中。

    Decorator类实现了SetComponent方法,接受核心功能对象,在Decorator类的子类中重写Opration方法,实现功能的叠加。

        public abstract class Decorator : Component
        {
            protected Component component;

            public void SetComponent(Component component)
            {
                this.component = component;
            }
            public override void Opration()
            {
                if (component != null)
                {
                    component.Opration();
                }
            }
        }
     

    装饰类:(继承Decorator,拥有了SetComponent方法,来接受需要增加功能的对象,重写Opration方法就是增加功能的依据)

        public class ConcreteDecoratorA : Decorator
        {
            public override void Opration()
            {
                base.Opration();//就是通过这个语句实现功能块叠加
                Console.WriteLine("ConcreteDecoratorA类的操作");
            }
        }
        public class ConcreteDecoratorB : Decorator
        {
            public override void Opration()
            {
                base.Opration();//就是通过这个语句实现功能块叠加
                Console.WriteLine("ConcreteDecoratorB类的操作");
            }
        }

     


  • 相关阅读:
    Python中字符的练习
    Python中的数据结构 --- 集合(set)
    Python中的数据结构 --- 元组(tuple)、字典(tuple)
    Python中的数据结构 --- 列表(list)
    Python变量、字符练习1
    Python中字符串的操作
    Python中for、while、break、continue、if的使用
    Python中的变量
    Python中注释的添加
    Python的介绍及Pycharm软件的安装
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2598670.html
Copyright © 2011-2022 走看看