装饰模式(Decorator),动态的给一个对象添加一些额外的职责,如下图,此图来自:<<大话设计模式>>
Component是定义一个对象接口,可以给这些对象动态的添加职责。
ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。
Decorator装饰类,继承了Component,从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator的存在的
至于ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能
假设现在有一个图书馆,存有大量的书或影碟,相对于书或影碟,其本身没有出借服务,现在就可以借助装饰模式为其添加出借功能,结构图如下:此源自网上的一个例子
各个类实现如下:
组件基类
具体组件类:
装饰基类: 主要输出m_pItem原有的装饰,并为具体装饰类提供接口
具体装饰类:位被装饰者增加额外的功能
主类:
这里还可以继续给被装饰者添加别的功能,就像Borrowable一样。