意图:动态地给一个对象添加职责。
问题:要使用的对象执行所需的基本功能。但是,可能需要为这个对象将添加某些功能,这些附加功能可能发生在对象的基础功能之前或之后。
解决方案:可以无需创建子类,而扩展一个对象的功能。
参与者与协作者:ConcreteComponent让Decorator对象为自己添加功能。有时候用ConcreteComponent的派生类提供核心功能,在这种情况下ConcreteComponent类就不再是具体的,而是抽象的。Component类定义了所有这些所使用的接口。
效果:所添加的功能放在小对象中。好处是可以在ConcreteComponent对象的功能之前或之后动态添加功能。注意,虽然装饰对象可以在被装饰对象之前或之后添加功能,但对象链总是终于ConcreteComponent对象。
实现:创建一个抽象类来表示原类和要添加到这个类的新功能。在装饰类中,将对新功能的调用放在对紧随其后对象的调用之前或之后,以获得正确的顺序。
结构图:
Decorator模式的约束因素:
1. 存在几种可选的功能。
2. 这些装饰对象可能遵循也可能不遵循所有规则。
3. 需要某些方式以所需的不同顺序调用这些装饰对象,但是又不能加重客户对象的负担。
4. 不希望应用程序必须承担知道使用哪些装饰对象(甚或是否存在)的职责。
摘自《设计模式解析(第2版)》第17章
Tags: 设计模式
看不懂。。。
呵,这是软件方面的技术内容,有兴趣也可以研究一下。