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();
}
}