复合模式和装饰者模式有什么不同?
发布于 2010-02-10 10:13:37
它们通常并驾齐驱。因为使用复合模式通常也会导致使用装饰器模式。
复合模式允许您以允许外部代码将整个结构视为单个实体的方式构建分层结构(如元素树)。因此,叶实体的接口与复合实体的实体完全相同。因此,本质上是您的复合结构中的所有元素都具有相同的接口,即使其中一些是叶节点,而另一些是整个结构。用户界面通常使用这种方法来实现轻松的可组合性。
http://en.wikipedia.org/wiki/Composite_pattern
装饰器模式允许一个实体完全包含另一个实体,以便使用装饰器看起来与所包含的实体相同。这允许装饰器修改它所封装的任何东西的行为和/或内容,而不改变实体的外观。例如,您可以使用装饰器来添加有关所包含元素的使用的日志记录输出,而不会更改所包含元素的任何行为。
http://en.wikipedia.org/wiki/Decorator_pattern
发布于 2012-01-05 19:38:45
复合模式和装饰器的结构看起来是一样的,但它们的意图是不同的。
组合为叶和组合提供了统一的接口。
装饰器装饰器为叶子提供了额外的功能,同时提供了统一的界面。
示例
复合模式:经典的windows文件夹和文件。Windows文件夹是复合文件夹。文件是树叶。双击任何一个都会打开文件/文件夹-双击是统一的界面。
装饰器模式:Buffered io - java.io.FileWriter和java.io.BufferedWriter都扩展了java.io.Writer。java.io.BufferedWriter是复合的,而FileWriter是叶。BufferedWriter为FileWriter添加了额外的缓冲职责(或特性)。write()方法是统一的接口,而缓冲是附加功能。
发布于 2013-01-29 22:54:56
装饰器可以看作是只有一个组件的退化的复合体。然而,装饰器增加了额外的职责-它不是用于对象聚合的。
这就是四人组在“设计模式--可重用面向对象软件的元素”中所说的。
https://stackoverflow.com/questions/2233952
复制相似问题