Design patterns 装饰器模式中的重复属性
我打算使用decorator模式,我想知道属性复制…我的意思是,如果基类(被修饰的那个)有很多状态(属性、属性或其他),当你使用decorator模式时,你总是会得到该状态的两个副本,对吗?(装饰课上的那个,装饰课上的那个)总是这样吗 一个类似的问题被问到了,但回答并没有让我更清楚 同样在《头部优先:设计模式》一书中,他们没有提到这种模式的缺点Design patterns 装饰器模式中的重复属性,design-patterns,decorator,Design Patterns,Decorator,我打算使用decorator模式,我想知道属性复制…我的意思是,如果基类(被修饰的那个)有很多状态(属性、属性或其他),当你使用decorator模式时,你总是会得到该状态的两个副本,对吗?(装饰课上的那个,装饰课上的那个)总是这样吗 一个类似的问题被问到了,但回答并没有让我更清楚 同样在《头部优先:设计模式》一书中,他们没有提到这种模式的缺点 干杯 对我来说,装饰器不需要存储状态,例如:如果类a有一个方法getTotal(),那么DecoratorA::getTotal()可能返回2*a::g
干杯 对我来说,装饰器不需要存储状态,例如:如果类
a
有一个方法getTotal()
,那么DecoratorA::getTotal()
可能返回2*a::getTotal()
装饰器可以根据它装饰的对象惰性地返回数据。它可能有一些属性(如我的示例中的2
),但它基本上是带有一些前/后处理的委托
如果成本太高(比如缓存),您最终会存储它,但我想知道如果需要存储每个属性,那么这样的装饰器有什么用呢。返回装饰对象的新实例会更快,其属性基于某种计算。是的,我同意装饰器不需要存储状态……但由于它也是装饰对象的实例,它自动拥有装饰对象的所有属性(尽管它可能不需要或想要它们)对还取决于您是否使用接口或抽象。如果您为装饰器进行继承,那么您可能应该基于另一个对象创建一个新的对象——比如说一个装饰器具有一个恒定的状态,即使装饰对象发生变化也不会改变——但我不会称之为装饰器。