我在使用装饰器模式的类中遇到问题。
当内部对象在对其他对象的调用中使用“ this”引用时,就会出现问题。这将导致来自接收到“ this”引用的对象的所有调用直接针对内部对象,而无需先经过外部对象。
解决此问题的通常方法是什么?
谢谢。
对象具有一个隐式值:它们的身份(可以通过应用进行测试==
)。包装它们时,您实际上隐藏了该标识(更糟的是,您还暴露了一个潜在的误导性标识,即包装程序本身的标识)。因此,一种显而易见的方法是通过另一种方式(显式地)公开对象的身份来对此进行补偿。例如,您可能会引入方法Object getIdentity()
,该方法返回一个真正代表预期身份的对象,并允许对其进行应用==
。
但是,巨大的缺点是您仍然允许==
装饰器本身使用,例如,存在以下危险:
identity == decorator
而不是identity == decorator.getIdentity()
)例如,如果对象具有如下方法,则该问题将不存在:
protected Object getIdentity() {
return this;
}
在哪个==
运算符上进行定义,因此包装器还可以包装被包装对象的标识,而不用自己的对象替换。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句