首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复合模式和装饰者模式之间的区别?

复合模式和装饰者模式之间的区别?
EN

Stack Overflow用户
提问于 2010-02-10 10:08:05
回答 7查看 35.8K关注 0票数 61

复合模式和装饰者模式有什么不同?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-02-10 10:13:37

它们通常并驾齐驱。因为使用复合模式通常也会导致使用装饰器模式。

复合模式允许您以允许外部代码将整个结构视为单个实体的方式构建分层结构(如元素树)。因此,叶实体的接口与复合实体的实体完全相同。因此,本质上是您的复合结构中的所有元素都具有相同的接口,即使其中一些是叶节点,而另一些是整个结构。用户界面通常使用这种方法来实现轻松的可组合性。

http://en.wikipedia.org/wiki/Composite_pattern

装饰器模式允许一个实体完全包含另一个实体,以便使用装饰器看起来与所包含的实体相同。这允许装饰器修改它所封装的任何东西的行为和/或内容,而不改变实体的外观。例如,您可以使用装饰器来添加有关所包含元素的使用的日志记录输出,而不会更改所包含元素的任何行为。

http://en.wikipedia.org/wiki/Decorator_pattern

票数 48
EN

Stack Overflow用户

发布于 2012-01-05 19:38:45

复合模式和装饰器的结构看起来是一样的,但它们的意图是不同的。

组合为叶和组合提供了统一的接口。

装饰器装饰器为叶子提供了额外的功能,同时提供了统一的界面。

示例

复合模式:经典的windows文件夹和文件。Windows文件夹是复合文件夹。文件是树叶。双击任何一个都会打开文件/文件夹-双击是统一的界面。

装饰器模式:Buffered io - java.io.FileWriterjava.io.BufferedWriter都扩展了java.io.Writerjava.io.BufferedWriter是复合的,而FileWriter是叶。BufferedWriterFileWriter添加了额外的缓冲职责(或特性)。write()方法是统一的接口,而缓冲是附加功能。

票数 49
EN

Stack Overflow用户

发布于 2013-01-29 22:54:56

装饰器可以看作是只有一个组件的退化的复合体。然而,装饰器增加了额外的职责-它不是用于对象聚合的。

这就是四人组在“设计模式--可重用面向对象软件的元素”中所说的。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2233952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档