zoukankan      html  css  js  c++  java
  • 设计模式学习笔记——装饰者模式(Decorator)

    1.特点:动态增加单个对象的额外职责,比生成子类更灵活。

    2.概念:动态给一个对象添加额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

    3.类图:

    4.程序实现

    /// <summary>
        /// 定义一个对象接口,可以给这些对象动态地添加职责
        /// </summary>
        public abstract class Component
        {
            public abstract void Opration();
        }
    
        /// <summary>
        /// 具体对象
        /// </summary>
        public class ConcreteComponent:Component
        {
    
            public override void Opration()
            {
                // 具体对象的操作
            }
        }
    
        /// <summary>
        /// 抽象的装饰类,它不能初始化对象。
        /// </summary>
        public abstract class Decorator:Component
        {
            protected Component component;
    
            /// <summary>
            /// 设置Component
            /// </summary>
            /// <param name="component"></param>
            public void SetComponent(Component component)
            {
                this.component = component;
            }
    
            /// <summary>
            /// 重写Operation,实际执行的是Component的Operation。
            /// </summary>
            public override void Opration()
            {
                if (component != null)
                {
                    component.Opration();
                }
            }
        }
    
        public class ConcreteDecoratorA : Decorator
        {
            private void SpecialOpration()
            {
                // 本类特有的功能
            }
    
            public override void Opration()
            {
                //首先运行原Component的Operation(),在执行本类的功能,相当于对原Component进行了装饰
                base.Opration();
    
                this.SpecialOpration();
            }
        }
    
        public class ConcreteDecoratorB : Decorator
        {
            private void SpecialOprationA()
            {
                // 本类特有的功能 A
            }
    
            private void SpecialOprationB()
            {
                // 本类特有的功能 B
            }
    
            public override void Opration()
            {
                //首先运行原Component的Operation(),在执行本类的功能,相当于对原Component进行了装饰
                base.Opration();
    
                this.SpecialOprationA();
                this.SpecialOprationB();
            }
        }
    

      

  • 相关阅读:
    springboot系列六、springboot配置错误页面及全局异常
    一行代码完成 Java的 Excel 读写--easyexcel
    Docker搭建Portainer可视化界面
    使用spring-boot-admin对spring-boot服务进行监控
    SpringBoot集成JWT实现权限认证
    安装Docker
    Java的 Excel 读写--easyexcel
    SpringBoot 配置文件提示功能
    Mysql数据库中获取时间
    javascript-观察者模式
  • 原文地址:https://www.cnblogs.com/ice-baili/p/4710349.html
Copyright © 2011-2022 走看看