【问题标题】:Duplicated attributes in the decorator pattern装饰器模式中的重复属性
【发布时间】:2014-08-22 09:31:10
【问题描述】:

我打算使用装饰器模式,我想知道属性重复...我的意思是,如果基类(被装饰的那个)有很多状态(属性、属性或其他),当你使用装饰器模式,你总是会得到该状态的两个副本,对吗? (装饰班的那个,装饰班的那个)总是这样吗?

Here 类似的问题是“有点”问的,但回复并没有让我更清楚。

在“Head First: Design Patterns”一书中,他们也没有提到这种模式的缺点。

干杯!!

【问题讨论】:

    标签: design-patterns decorator


    【解决方案1】:

    对我来说,装饰器不需要存储状态,例如:如果类A 有一个方法getTotal(),那么DecoratorA::getTotal() 可能会返回2*A::getTotal()

    装饰器可以根据它装饰的对象懒惰地返回数据。它可能有一些属性(比如我的示例中的2),但它基本上是带有一些预处理/后处理的委托。

    如果成本太高(比如一些缓存),你最终会存储它,但我想知道如果每个属性都需要存储,那么这样的装饰器有什么用。返回装饰对象的新实例会更快,其属性基于某种计算。

    【讨论】:

    • 是的,我同意装饰器不需要存储状态...但是由于它也是装饰对象see, e.g., the Wikipedia diagram 的一个实例,它自动具有装饰对象的所有属性(虽然,也许它不需要它们或不需要它们)
    • 是的。还取决于您使用接口还是抽象。如果你为你的装饰器进行继承,那么你可能应该基于另一个对象创建一个新对象——比如一个具有恒定状态的装饰器,即使被装饰的对象发生变化也不会改变——但我不会称之为装饰器。
    猜你喜欢
    • 2012-07-15
    • 2019-11-22
    • 2011-05-30
    • 2012-12-08
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    相关资源
    最近更新 更多