设计模式-装饰模式

2017-11-29  本文已影响0人  AngerCow

装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。[DP]


image.png

//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();
    }
}

总结:装饰模式简化原有的类。把类与装饰功能区分开了,这样可以有效使用装饰功能,自由度也变得很高。
何时使用:当一个功能新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为。装饰模式把装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,当需要执行特殊行为时,按选择顺序使用装饰功能包装对象。

上一篇下一篇

猜你喜欢

热点阅读