首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计形式(3)——装饰者模式

2012-10-26 
设计模式(3)——装饰者模式1. 定义??? The Decorator Pattern attaches additional responsibilities to an

设计模式(3)——装饰者模式

1. 定义

??? The Decorator Pattern attaches additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.

(装饰者模式可以动态地给一个对象增加其他职责。就扩展对象功能来说,装饰者模式比生成子类更为灵活。)

?

2. 类图及描述

设计形式(3)——装饰者模式

Component(被装饰对象基类)??

l???????? 定义对象的接口,可以给这些对象动态增加职责;

ConcreteComponent(具体被装饰对象)
l???????? 定义具体的对象,Decorator可以给它增加额外的职责;

Decorator(装饰者抽象类)

l???????? 维护一个指向Component实例的引用,并且定义了与Component一致的接口;

ConcreteDecorator(具体装饰者)
l???????? 具体的装饰对象,给内部持有的具体被装饰对象增加具体的职责;

?

3. 应用场景及优缺点

??? 装饰者模式的应用场景:

(1)? 想透明并且动态地给对象增加新的职责的时候。

(2)? 给对象增加的职责,在未来存在增加或减少可能。

(3)? 用继承扩展功能不太现实的情况下,应该考虑用组合的方式。

??? 装饰者模式的优点:

(1)? 通过组合而非继承的方式,实现了动态扩展对象的功能的能力。

(2)? 有效避免了使用继承的方式扩展对象功能而带来的灵活性差,子类无限制扩张的问题。

(3)? 充分利用了继承和组合的长处和短处,在灵活性和扩展性之间找到完美的平衡点。

(4)? 装饰者和被装饰者之间虽然都是同一类型,但是它们彼此是完全独立并可以各自独立任意改变的。

(5)? 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。

??? 装饰者模式的缺点:
(1)? 装饰链不能过长,否则会影响效率。

(2)? 因为所有对象都是Component,所以如果Component内部结构发生改变,则不可避免地影响所有子类(装饰者和被装饰者),也就是说,通过继承建立的关系总是脆弱地,如果基类改变,势必影响对象的内部,而通过组合(Decoator HAS A Component)建立的关系只会影响被装饰对象的外部特征。

(3)只在必要的时候使用装饰者模式,否则会提高程序的复杂性,增加系统维护难度。

?

热点排行