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类的操作");
            }
        }

     


  • 相关阅读:
    【工具类】图片压缩工具类,可压缩jpg, png等图片
    【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
    【Nginx异常】[error] 4236#29900: OpenEvent(“Global gx_reload_27128“) failed (5: Access is denied)
    【Nginx异常】Nginx启动一闪而过没反应,Nginx双击打开后,没有启动成功,也没有进程,且127.0.0.1:8080访问不到
    开启vue-element-ui打包生成报告
    Cas 5.2.x 使用 实现SSO单点登录的问题
    springmvc在使用@ModelAttribute注解获取Request和Response会产生线程并发不安全问题
    企业微信会话存档开发与问题
    高手怎么查找CPU过高的Java代码。具体到行
    ubuntu中清除开始菜单中的应用图标
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2598670.html
Copyright © 2011-2022 走看看