设计模式 - 适配器模式与装饰器模式? [复制]
Posted
技术标签:
【中文标题】设计模式 - 适配器模式与装饰器模式? [复制]【英文标题】:Design Patterns - Adapter pattern vs Decorator Pattern? [duplicate] 【发布时间】:2017-08-01 21:39:57 【问题描述】:我一直在阅读有关设计模式的文章,这让我很好奇:
装饰器模式说包装一个原始对象并在包装器对象中添加附加功能。所以从结构上讲 - 包装器遵循装饰器模式。
适配器模式是指通过创建一个对象的实例并向其添加功能来更改一个对象。这些功能与原始对象的功能不匹配,因此我们必须对其进行修改,但我们也可以添加自己的额外方法,这些方法不属于原始对象。
在这方面,适配器和装饰器设计模式有什么区别?
【问题讨论】:
请注意,这类问题通常更适合softwareengineering.stackexchange.com。无论如何,这是重复的。 @SpencerWieczorek 我们可以从一个网站转移到另一个网站吗? 【参考方案1】:Decorator,动态地为对象附加额外的职责。例如在咖啡中加糖。
Adapter,将现有类的接口适配到另一个接口。例如电气适配器。
【讨论】:
当你刚开始时,真实世界的例子很少有帮助。 动态是什么意思? 运行时,无需更改源代码即可添加新行为 它通过composition
关系使得运行时新行为添加成为可能。【参考方案2】:
来自这个答案:How do the Proxy, Decorator, Adapter, and Bridge Patterns differ?
装饰器也称为“智能代理”。当您想向对象添加功能而不是扩展该对象的类型时使用此选项。这允许您在运行时这样做。
当您有一个抽象接口并且您想将该接口映射到另一个具有相似功能但接口不同的对象时使用适配器。
主要区别在于:
装饰器用于在运行时装饰单个对象。适配器用于向类添加特性,从而向它的所有对象添加特性。
【讨论】:
确实,Adapter 以类为目标,因此以它的所有对象为目标。但是,Adapter 的目的不是添加功能,而是将旧功能转换为新接口。以上是关于设计模式 - 适配器模式与装饰器模式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章