Ruby on Rails模式-装饰器与演示者


Answers:


102

装饰器更多是“让我们为该实体添加一些功能”。演示者更多的是“让我们在模型/后端和视图之间架起一座桥梁”。演示者模式有几种解释。

装饰器是通用/通用的。演示者的职责/用途范围更窄。装饰器跨域使用,显示器几乎总是与类似视图的功能相关。


3
谢谢。似乎Draper宝石是演示者和装饰者的混合体。
keruilin 2011年

17
@keruilin要记住的一件事:装饰器确实应该能够装饰其他装饰器(以及装饰组件对象),因为装饰器的目的之一是避开继承的限制。(德雷珀并没有做到这一点)。在这种意义上,装饰器模式与复合模式非常相似,只是从外到内而不是从内到外进行处理(如果可以的话)。
涂抹

7
我将装饰器视为通用模式,将呈现器视为与视图层相关的装饰器的特定应用程序。
克里斯(Kris)

2
@涂抹,布料装饰者可以装饰其他装饰,至少就像基础模型具有STI关系一样。
keruilin 2012年

看来Draper现在将自己标识为表示层包装器-因此它不再是装饰器,而是实际上的表示者。从他们的GH:“ Draper向Rails应用程序中添加了一个面向对象的表示逻辑层。”
贾里德(Jared)

35

我建议您检查一下- 展览与主持人

装饰器是一种设计模式,用于通过包装特定对象来扩展其功能,而不会影响该对象的其他实例。通常,装饰器模式是打开/关闭原理的示例 (该类关闭以进行修改,但可用于扩展)。

展览和演示者模式都是装饰器模式的一种。


+1,用于链接到Mike Pack的博客文章。出色的文章,解释了模式之间的差异。
ki4jnq '16

+1表示展览模式。我最终得到了Avdi Grimm的书来解释它。虽然,这不是解决我问题的正确方法,但这仍然是一个了不起的模式。令人深思的美食。
Yonk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.