装饰(Decorator)模式 结构型模式
更新: 2023-05-24 11:11:27 字数: 0 字 时长: 0 分钟
动态的给对象增加一些职责,即增加其额外的功能。
c#
// 装饰模式示例
using System;
// 定义一个抽象类,表示被装饰者
abstract class Component
{
public abstract void Operation();
}
// 定义一个具体的被装饰者
class ConcreteComponent : Component
{
public override void Operation()
{
Console.WriteLine("具体对象的操作");
}
}
// 定义一个装饰类,继承自Component,用于装饰被装饰者
class Decorator : Component
{
protected Component component;
public void SetComponent(Component component)
{
this.component = component;
}
public override void Operation()
{
if (component != null)
{
component.Operation();
}
}
}
// 定义一个具体的装饰类,继承自Decorator,用于具体装饰被装饰者
class ConcreteDecoratorA : Decorator
{
private string addedState;
public override void Operation()
{
base.Operation();
addedState = "New State";
Console.WriteLine("具体装饰对象A的操作");
}
}
// 定义一个具体的装饰类,继承自Decorator,用于具体装饰被装饰者
class ConcreteDecoratorB : Decorator
{
public override void Operation()
{
base.Operation();
AddedBehavior();
Console.WriteLine("具体装饰对象B的操作");
}
private void AddedBehavior()
{
Console.WriteLine("具体装饰对象B的附加操作");
}
}
class Client
{
static void Main(string[] args)
{
ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA();
ConcreteDecoratorB d2 = new ConcreteDecoratorB();
// 装饰的顺序很重要,先用ConcreteDecoratorA装饰ConcreteComponent,
// 再用ConcreteDecoratorB装饰ConcreteDecoratorA
d1.SetComponent(c);
d2.SetComponent(d1);
d2.Operation();
Console.Read();
}
}