裝飾器模式動態地給一個對象添加一些額外的職責。就增加功能來說,裝飾器模式相比生成子類更為靈活。
// 組件接口
public interface IComponent
{ void Operation();
} // 具體組件
public class ConcreteComponent : IComponent
{ public void Operation() { Console.WriteLine("ConcreteComponent.Operation()"); }
} // 裝飾器抽象類
public abstract class Decorator : IComponent
{ protected IComponent _component; public Decorator(IComponent component) { _component = component; } public virtual void Operation() { _component.Operation(); }
} // 具體裝飾器
public class ConcreteDecoratorA : Decorator
{ public ConcreteDecoratorA(IComponent component) : base(component) {} public override void Operation() { base.Operation(); AddedFunctionality(); } private void AddedFunctionality() { Console.WriteLine("Added functionality in ConcreteDecoratorA"); }
} // 客戶端代碼
class Program
{ static void Main(string[] args) { IComponent component = new ConcreteComponent(); // 裝飾者模式的使用 component = new ConcreteDecoratorA(component); // 執行操作 component.Operation(); }
}