设计模式(1)装饰模式总结

来源:互联网 发布:倪妮微博照片修图软件 编辑:程序博客网 时间:2024/04/29 10:09


概述


动态为对象添加额外的功能,相对以前利用子类继承来增加父类的功能来说。装饰模式更为简洁、灵活,更符合面向


对象的原则。


装饰模式结构图

在Decorator类中,通过SetComponent构造函数来对Component对象进行设置,从而扩展Component的功能,

namespace 装饰模式{    class Program    {        static void Main(string[] args)        {            ConcreteComponent c = new ConcreteComponent();            ConcreteDecoratorA a = new ConcreteDecoratorA();            ConcretedDecoratorB b = new ConcretedDecoratorB();            a.SetComponent(c);            b.SetComponent(a);            b.Operation();            Console.ReadLine();        }    }    //Component类    abstract class Component    {        public abstract  void Operation();    }    //ConcreteComponet类    class ConcreteComponent : Component    {        public override void Operation()        {            Console.WriteLine("具体对象的操作!!!") ;        }    }    //Decorator类    abstract  class Decorator : Component    {           //设置Component        protected Component component;        public void SetComponent (Component component)        {            this.component = component;        }        public override void Operation()        {            if (component != null)            {                component.Operation();            }        }    }    //ConcreteDecoratorA类    class ConcreteDecoratorA :Decorator     {        private string addedState;        public override void Operation()        {            base.Operation();            addedState = "标识A的操作,以区别操作B!!!";            Console.WriteLine ("具体对象A的操作!!!");        }    }    //ConcreteDecoratorB类    class ConcretedDecoratorB : Decorator    {        private string removeState;        public override void Operation()        {            base.Operation();            removeState = "标识操作B,以区别操作A!!!";            Console.WriteLine("具体对象B的操作!!!");        }    }}


最后调用的实际上是Component的方法。


运行结果


特点

1、通过组合而非继承的方式,实现了动态扩展对象的功能的能力

2、有效避免了使用继承的方式扩展对象功能而带来的灵活性差,子类无限制扩张的问题

3、充分利用了继承和组合的长处和短处,在灵活性和扩展性之间找到完美的平衡点

4、装饰者和被装饰者之间虽然都是同一类型,但是它们彼此是完全独立并可以各自独立任意改变的

5、遵守大部分grasp原则和常用设计原则,高内聚、低偶合


6、在装饰过程过长的情况下,影响执行效率。

原创粉丝点击