以下是一个简单的C#装饰器模式示例,它展示了如何实现一个装饰器来增加一个对象的功能。
cs
// 组件基类
public abstract class Component
{
public abstract void Operation();
}
// 具体组件
public class ConcreteComponent : Component
{
public override void Operation()
{
Console.WriteLine("具体操作。");
}
}
// 装饰器抽象类
public abstract class Decorator : Component
{
protected Component component;
public Decorator(Component component)
{
this.component = component;
}
public override void Operation()
{
if (component != null)
{
component.Operation();
}
}
}
// 具体装饰器
public class ConcreteDecoratorA : Decorator
{
public ConcreteDecoratorA(Component component) : base(component) { }
public override void Operation()
{
base.Operation();
Console.WriteLine("具体装饰器A的操作。");
}
}
// 客户端代码
class Program
{
static void Main(string[] args)
{
// 创建一个具体组件对象
Component component = new ConcreteComponent();
// 创建一个具体装饰器对象,并将组件作为参数传入
Decorator decorator = new ConcreteDecoratorA(component);
// 调用装饰器的操作方法,它将首先调用组件的操作方法,然后添加额外的操作
decorator.Operation();
}
}
这个例子中,ConcreteComponent
类表示一个基本的对象,而 ConcreteDecoratorA
类是装饰器,它扩展了 ConcreteComponent
的功能。在 Main
方法中,我们首先创建了一个 ConcreteComponent
对象,然后用这个对象作为参数创建了一个 ConcreteDecoratorA
对象。当我们调用 decorator.Operation()
时,它将首先调用 component.Operation()
,然后输出额外的信息,演示了装饰器如何增加功能的过程。