所谓装饰模式,即可以动态的给某个对象添加一些额外的功能。
装饰模式一般具有以下几种类:
- Component:定义了一个需要装饰的对象的接口。
- ConcreteComponent:继承自Component类,它定义了一个具体的对象。
- Decorator:用于装饰的抽象类,继承自Component类。
- ConcreteDecorator:具体的装饰类,给Component对象添加职责。
各个类的实现的简单举例:
Component类:
abstract class Component
{
public abstract void func();
}
ConcreteComponent类:
class ConcreteComponent : Component
{
public override void func()
{
......
}
}
Decorator类:
abstract class Decorator : Component
{
protected Component component;
public void SetComponent(Component component)
{
this.component = component;
}
public override void func()
{
component.func();
}
}
应用如下:DecoratorA和DecoratorB继承自Decorator类,它们分别重写了Decorator类的func函数。
DecoratorA类:
class DecoratorA :Decorator
{
public override void func()
{
base.func();
..........
}
}
DecoratorB类:
class DecoratorB :Decorator
{
public override void func()
{
base.func();
..........
}
......//other function
}
调用如下:
ConcreteComponent c1=new ConcreteComponent();
DecoratorA da=new DecoratorA();
DecoratorA db=new DecoratorB();
da.SetComponent(c1);
db.SetComponent(da);
db.func();