装饰模式的定义:
是允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰模式在设计模式中属于结构型模式,它是作为现有类的一个包装。
主要意图:动态的给一个对象添加一些额外的职责 (就增加功能来说,装饰器模式相比生成自雷更为灵活)。
使用场景:在不想增加很多子类的情况下扩展类(1,扩展一个类的功能。2,动态增加功能,动态撤销。)。
优点:装饰类和被装饰类可以独立发展,耦合度低,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
缺点:多层装饰比较麻烦
在某种意义上是可以代替继承使用。
首先我们来看一下它的类图:
接下来是代码:
using System; namespace _03装饰模式_演示 { class Program { static void Main(string[] args) { ConcreteComponent c = new ConcreteComponent(); ConcreteDecoratorA d1 = new ConcreteDecoratorA(); ConcreteDecoratorB d2 = new ConcreteDecoratorB(); d1.SetComponent(c); d2.SetComponent(d1); d2.Operation(); Console.Read(); } } abstract class Componet { public abstract void Operation(); } class ConcreteComponent:Componet { public override void Operation() { Console.WriteLine("具体对象的操作"); } } abstract class Decorator:Componet { protected Componet componet; public void SetComponent(Componet componet) { this.componet = componet; } public override void Operation() { if(componet != null) { componet.Operation(); } } } class ConcreteDecoratorA:Decorator { private string addedState; public override void Operation() { base.Operation(); addedState = "New State"; Console.WriteLine("具体装饰对象A的操作"); } } class ConcreteDecoratorB:Decorator { public override void Operation() { base.Operation(); AddedBehavior(); Console.WriteLine("具体张氏对象B的操作"); } private void AddedBehavior() { } } }