设计模式之装饰者模式

有些时候我们希望给某个对象而不是整个类添加一些功能,这时可以看看装饰者模式。装饰者模式动态的给一个对象添加一些额外的职责(动作和状态)。装饰者与它所装饰的组件接口一致,它将客户的请求转发给该组件并在转发前或后增加一些额外的行为,但他对使用组件的客户透明。
        继承机制也是添加功能的一种有效途径,单是是在编译时静态确定的。而装饰者是在客户使用时,动态的进行增加功能,使用的是组合和委托的方式。
        
        装饰者模式中有四种参与者,组件(Component)定义一个对象接口,可以给这些对象动态的添加职责;具体组件(ConcreteComponent)定义一个对象,可以给这个对象添加一些职责;装饰者(Decorator)维持一个指向组件对象的指针,并定义一个与组件接口一致的接口;具体装饰者(ConcreteDecorator)向组件添加职责。

        装饰者模式类结构图如下:
        
设计模式之装饰者模式_第1张图片 设计模式之装饰者模式_第2张图片

        装饰者代码实现,在实际使用时根据具体的应用场合,更改具体类的名称。
        Compont类是所有装饰者和被装饰者的基类,提供抽象的共有接口,该类也是实现装饰者模式的基础,正因为有了共同的基类,共同的接口,才能使装饰者在客户端面前透明的进行一些额外的操作。该类应该尽量的精炼,如果该类过于庞大,装饰者和被装饰者都继承该庞大的类,将会发生代码膨胀。


ConcreteComponent类是真正的被装饰者,他对接口完成一些基础的操作,对于该操作可以通过装饰者来进行添加。在客户程序中该对象总是被首先创建,然后将其传递给装饰者进行装饰。


Decorator装饰者基类,基类中的操作通过组建对象调用所装饰组件的同名操作。该类实现的功能也可以直接放入真正的装饰者中,如果真正的装饰者类较多时,通过该类可以很好的共享代码。


ConcreteDecoratorA真正的装饰者类,在被装饰者的行为前或后增加一些其他的行为


ConcreteDecoratorB真正的装饰者类,在被装饰者的行为前或后增加一些其他的行为

你可能感兴趣的:(设计模式之装饰者模式)