【发布时间】:2014-08-22 09:31:10
【问题描述】:
我打算使用装饰器模式,我想知道属性重复...我的意思是,如果基类(被装饰的那个)有很多状态(属性、属性或其他),当你使用装饰器模式,你总是会得到该状态的两个副本,对吗? (装饰班的那个,装饰班的那个)总是这样吗?
Here 类似的问题是“有点”问的,但回复并没有让我更清楚。
在“Head First: Design Patterns”一书中,他们也没有提到这种模式的缺点。
干杯!!
【问题讨论】:
我打算使用装饰器模式,我想知道属性重复...我的意思是,如果基类(被装饰的那个)有很多状态(属性、属性或其他),当你使用装饰器模式,你总是会得到该状态的两个副本,对吗? (装饰班的那个,装饰班的那个)总是这样吗?
Here 类似的问题是“有点”问的,但回复并没有让我更清楚。
在“Head First: Design Patterns”一书中,他们也没有提到这种模式的缺点。
干杯!!
【问题讨论】:
对我来说,装饰器不需要存储状态,例如:如果类A 有一个方法getTotal(),那么DecoratorA::getTotal() 可能会返回2*A::getTotal()。
装饰器可以根据它装饰的对象懒惰地返回数据。它可能有一些属性(比如我的示例中的2),但它基本上是带有一些预处理/后处理的委托。
如果成本太高(比如一些缓存),你最终会存储它,但我想知道如果每个属性都需要存储,那么这样的装饰器有什么用。返回装饰对象的新实例会更快,其属性基于某种计算。
【讨论】: