对基类的已有功能的扩展,不通过继承的方式来实现。
1.Component:
对已有对象的允许扩展的功能进行接口定义
public abstract class Component2
{
//允许Decorator/子类动态修改的接口
public abstract void Operation();
}
2.ConcreteComponent
Component的子类实现
public class ConcreteComponent2 : Component2
{
public override void Operation()
{
Console.WriteLine("concrete component.Operation()");
}
}
3.Decorator:抽象类
继承实现Component,并且内部含有一个Component的对象引用
public abstract class Decorator2 : Component2
{
protected Component2 _com;
public Component2 Component2
{
set
{
_com = value;
}
}
public override void Operation()
{
if (_com!=null)
{
_com.Operation();
}
}
}
4.ConcreteDecorator:Decorator的具体实现
public class ConcreteDecorator2 : Decorator2
{
public override void Operation()
{
base.Operation();
Console.WriteLine("Concrete Decorator.Operation()");
}
}
5.Client调用
public class Client22
{
void Call()
{
ConcreteComponent2 component2 = new ConcreteComponent2();
ConcreteDecorator2 concreteDecorator2 = new ConcreteDecorator2();
concreteDecorator2.Component2 = component2;
concreteDecorator2.Operation();
}
}