C# Design Patterns (3) - Decorator
2009-06-29 07:07:51 来源:WEB开发网--------------------------------------------------------
Decorator Pattern 适用的情景:
你拥有一个已存在的组件类,却无法继承它 (subclassing)。
能够动态地为对象添加职责 (添加状态和行为)。
改变类中的成员和行为,但不影响其他对象。
希望能便于职责的撤消。
不想用「继承」来扩展行为。其中一种原因是避免当一些功能要交叉搭配引用时,单独用「继承」来设计会产生太多的子类、太复杂的类图结构 [1], [10];另一种考量可能是因为类的定义被隐藏,或类的定义不能用于生成子类。
Decorator Pattern 的优点:
可避免单独使用「继承」时,在扩展时不够弹性,且可能衍生过多的子类。
扩展时不需要修改既有的代码。
可在执行时期,动态地添加新行为 (职责)。
Decorator Pattern 的缺点:
可能会在程序中出现许多的小型类,亦即需要编写很多 ConcreteDecorator 类 (具体装饰者)。
若过度使用 Decorator 模式,会让程序逻辑变得很复杂。
别人较不易理解设计方式及代码,排查故障、追踪和调试也比较困难。
Decorator Pattern 的其他特性:
每个要装饰的功能,都放在单独的类中。
我们可以用无数个装饰者,去包装一个组件。
「装饰者」可以在「被装饰者」前面或后面,添加自己的行为,甚至将「被装饰者」的行为整个取代掉,以达到特定的目的。
「被装饰者」并不需要知道它已经被「装饰」过了,亦即 Component 类 (对象) 并不需要知道 Decorator 类 (对象) 的存在,且 Decorator 也仅仅认识 Component。
--------------------------------------------------------
更多精彩
赞助商链接