我打算使用装饰器模式,我想知道属性重复...我的意思是,如果基类(正在装饰的那个)有很多状态(属性,属性或其他),当你使用装饰器模式时,你最终会得到该状态的两个副本,对吧? (装饰课程中的那个,装饰课程中的那个)是这样的吗?
Here类似的问题是"有点"问道,但回复并没有让我更清楚。
同样在书" Head First:Design Patterns"中,他们没有提到任何类似这种模式的缺点。
干杯!!
答案 0 :(得分:0)
对我来说,装饰者不需要存储状态,例如:如果类A
有方法getTotal()
,那么DecoratorA::getTotal()
可能会返回2*A::getTotal()
。
装饰器可以根据它装饰的对象懒洋洋地返回数据。它可能有一些属性(比如我的示例中的2
),但它基本上是委托进行一些前/后处理。
如果成本太高(如某些缓存),你最终会存储它,但我想知道如果需要存储每个属性,这种装饰器的用途。返回装饰对象的新实例会更快,其中属性基于一些计算。