设计模式学习——Decorator(装饰)

意图:动态地给一个对象添加职责。

问题:要使用的对象执行所需的基本功能。但是,可能需要为这个对象将添加某些功能,这些附加功能可能发生在对象的基础功能之前或之后。

解决方案:可以无需创建子类,而扩展一个对象的功能。

参与者与协作者:ConcreteComponent让Decorator对象为自己添加功能。有时候用ConcreteComponent的派生类提供核心功能,在这种情况下ConcreteComponent类就不再是具体的,而是抽象的。Component类定义了所有这些所使用的接口。

效果:所添加的功能放在小对象中。好处是可以在ConcreteComponent对象的功能之前或之后动态添加功能。注意,虽然装饰对象可以在被装饰对象之前或之后添加功能,但对象链总是终于ConcreteComponent对象。

实现:创建一个抽象类来表示原类和要添加到这个类的新功能。在装饰类中,将对新功能的调用放在对紧随其后对象的调用之前或之后,以获得正确的顺序。

结构图:

Decorator模式的约束因素
1. 存在几种可选的功能。
2. 这些装饰对象可能遵循也可能不遵循所有规则。
3. 需要某些方式以所需的不同顺序调用这些装饰对象,但是又不能加重客户对象的负担。
4. 不希望应用程序必须承担知道使用哪些装饰对象(甚或是否存在)的职责。

摘自《设计模式解析(第2版)》第17章

Tags:

2 Responses to “设计模式学习——Decorator(装饰)”

  1. Aliaosha说道:

    看不懂。。。

Leave a Reply


提醒: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。