23種設計模式之一,英文叫Decorator Pattern,又叫裝飾者模式。裝飾模式是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。
class Program
{
static void Main(string[] args)
{
//首先用ConcreteComponent實例c,然後用ConcreteDecoratorA實例化對象d1來包裝c,再用ConcreteDecoratorB的對象d2包裝d1,最後執行d2的Operation()
ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA();
ConcreteDecoratorB d2 = new ConcreteDecoratorB();
d1.SetComponent(c);
d2.SetComponent(d1);
d2.Operation();
Console.Read();
}
}
abstract class Component
{
public abstract void Operation();
}
class ConcreteComponent : Component
{
public override void Operation()
{
Console.WriteLine("具體對象的操作");
}
}
abstract class Decorator : Component
{
protected Component component;
//設置Component
public void SetComponent(Component component)
{
this.component = component;
}
public override void Operation()
{
//重寫Operation(),實際執行的是component的Operation();
if (component != null)
{
component.Operation();
}
}
}
class ConcreteDecoratorA : Decorator
{
//本類獨有的功能
private string addedState;
public override void Operation()
{
//首先運行原Component的Operation(),在執行本類的功能addedstate,相當於對原Component進行了修飾
base.Operation();
addedState = "New State";
Console.WriteLine("具體裝飾對象A的操作");
}
}
class ConcreteDecoratorB : Decorator
{
public override void Operation()
{
base.Operation();
AddedBehavior();
Console.WriteLine("具體裝飾對象B的操作");
}
private void AddedBehavior()
{
}
}
代碼來源於《大話設計模式》