• 设计模式学习笔记——装饰者模式(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();
            }
        }
    

      

  • 相关阅读:
    两台虚拟机(不同电脑)通信
    虚拟机使用网络助手
    strcpy_s
    线程创建几种方法
    JavaWeb——EL详解
    JavaWeb_EL语法
    JavaWeb_JavaBean
    JavaWeb_HttpSession之验证码
    JavaWeb_HttpSession之表单的重复提交
    JavaWeb——相对路径和绝对路径
  • 原文地址:https://www.cnblogs.com/ice-baili/p/4710349.html
Copyright © 2020-2023  润新知