装饰模式:动态的给一个对象添加额外的职责,就增加功能来说,Decorator模式比生成子类更为灵活。。
Decorator模式的工作原理是:可以创建始于Decorator对象(负责新的功能的对象)终于原对象的一个对象“链”。


ConcreteComponent:让Decorator对象为自己添加功能。有时候使用ConcreteComponent的派生类提供核心功能,在这种情况就是用ConcreteComponent替代了Component的功能,而且装饰者是继承于ConcreteComponent的子类。
Component:定义ConcreteComponent和Decorator类要实现的方法,简单来说如果一个类继承于该类就具有装饰或被装饰能力。
Decorator:具有特定装饰功能的类,用来装饰ConcreteComponent类。
代码如下:
Component类
abstract class Component
{
public abstract void Operation();
}
ConcreteComponent类
class ConcreteComponent : Component
{
public override void Operation()
{
Console.WriteLine("具体对象的操作");
}
}
Decorate类
abstract class Decorate : Component
{
protected Component component;
public void SetComponent(Component component)
{
this.component = component;
}
public override void Operation()
{
if (component != null)
component.Operation();
}
}
ConcreteDecoratorA类
class ConcreteDecoratorA : Decorate
{
public string addedState;//A类独有的功能
public override void Operation()
{
base.Operation();
addedState = "New State";
Console.WriteLine("具体装饰对象A的操作"+ addedState);
}
}
ConcreteDecoratorB类
class ConcreteDecoratorB : Decorate
{
public override void Operation()
{
base.Operation();
AddedBehavior(); //B类独有的方法
Console.WriteLine("具体装饰对象B的操作");
}
private void AddedBehavior()
{
Console.WriteLine("B类独有/添加的方法");
}
}
调用:
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.ReadKey();
}
运行结果:

参考文章:
http://www.cnblogs.com/rush/archive/2011/05/08/Decorator_DesignPattern_NETFramework.html