装饰模式的定义:
是允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰模式在设计模式中属于结构型模式,它是作为现有类的一个包装。
主要意图:动态的给一个对象添加一些额外的职责 (就增加功能来说,装饰器模式相比生成自雷更为灵活)。
使用场景:在不想增加很多子类的情况下扩展类(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()
{
}
}
}