装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。[DP]
//Component类
abstract class Component {
public abstract void Operation();
}
//ConcrenteComponent类
class ConcrenteComponent : Component
{
public override void Operation()
{
//具体对象操作
}
}
//Decorator类
abstract class Decorator : Component
{
Component component;
public void SetComponent(Component component)
{
this.component = component;
}
public override void Operation()
{
if (component != null)
{
component.Operation();
}
}
}
//客户端代码
class TestDecorator : MonoBehaviour {
void Start () {
ConcrenteComponent c = new ConcrenteComponent();
ConcreteDecoratorA cd1 = new ConcreteDecoratorA();
ConcreteDecoratorB cd2 = new ConcreteDecoratorB();
cd1.SetComponent(c);
cd2.SetComponent(cd1);
cd2.Operation();
}
}
总结:装饰模式简化原有的类。把类与装饰功能区分开了,这样可以有效使用装饰功能,自由度也变得很高。
何时使用:当一个功能新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为。装饰模式把装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,当需要执行特殊行为时,按选择顺序使用装饰功能包装对象。