装饰器模式动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。
// 组件接口
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();
}
}