112 Ruby on Rails社区中最近有关于装饰者和演示者的各种讨论。 两者之间的本质区别是什么?如果有的话,有什么线索告诉我使用哪一个来代替另一个?还是将两者结合使用? ruby-on-rails design-patterns decorator presenter — 克鲁瑞林 source
102 装饰器更多是“让我们为该实体添加一些功能”。演示者更多的是“让我们在模型/后端和视图之间架起一座桥梁”。演示者模式有几种解释。 装饰器是通用/通用的。演示者的职责/用途范围更窄。装饰器跨域使用,显示器几乎总是与类似视图的功能相关。 德雷珀网站 RailsCasts Draper集 — 戴夫·牛顿 source 3 谢谢。似乎Draper宝石是演示者和装饰者的混合体。 — keruilin 2011年 17 @keruilin要记住的一件事:装饰器确实应该能够装饰其他装饰器(以及装饰组件对象),因为装饰器的目的之一是避开继承的限制。(德雷珀并没有做到这一点)。在这种意义上,装饰器模式与复合模式非常相似,只是从外到内而不是从内到外进行处理(如果可以的话)。 — 涂抹 7 我将装饰器视为通用模式,将呈现器视为与视图层相关的装饰器的特定应用程序。 — 克里斯(Kris) 2 @涂抹,布料装饰者可以装饰其他装饰,至少就像基础模型具有STI关系一样。 — keruilin 2012年 看来Draper现在将自己标识为表示层包装器-因此它不再是装饰器,而是实际上的表示者。从他们的GH:“ Draper向Rails应用程序中添加了一个面向对象的表示逻辑层。” — 贾里德(Jared)
35 我建议您检查一下- 展览与主持人。 装饰器是一种设计模式,用于通过包装特定对象来扩展其功能,而不会影响该对象的其他实例。通常,装饰器模式是打开/关闭原理的示例 (该类关闭以进行修改,但可用于扩展)。 展览和演示者模式都是装饰器模式的一种。 — dpaluy source +1,用于链接到Mike Pack的博客文章。出色的文章,解释了模式之间的差异。 — ki4jnq '16 +1表示展览模式。我最终得到了Avdi Grimm的书来解释它。虽然,这不是解决我问题的正确方法,但这仍然是一个了不起的模式。令人深思的美食。 — Yonk