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

  

posted @ 2015-08-07 11:58  ice_baili  阅读(160)  评论(0编辑  收藏  举报