gpt4 book ai didi

java - 如何处理装饰器模式中的 'this' 引用

转载 作者:搜寻专家 更新时间:2023-10-31 20:15:58 24 4
gpt4 key购买 nike

我在使用装饰器模式的类中遇到问题。

当内部对象在对其他对象的调用中使用“this”引用时,就会出现问题。这会导致从接收到“this”引用的对象直接调用内部对象,而不先通过外部对象。

解决这个问题的常用方法是什么?

谢谢。

最佳答案

对象有一个隐式值:它们的身份(可以通过应用== 来测试)。当您包装它们时,您实际上隐藏了该身份(更糟糕的是,您还暴露了一个可能具有误导性的身份,即包装器本身的身份)。因此,一种明显的方法是通过另一种方式显式地公开对象的身份来对此进行补偿。例如。您可能会引入一个方法 Object getIdentity(),它返回一个真正代表预期身份的对象,并允许对其应用 ==

但最大的缺点是你仍然允许装饰器本身使用 == ,例如一种危险:

  • 很自然,可以被骗进去(identity == decorator 而不是 identity == decorator.getIdentity())
  • 默默地做错事(与运行时异常相比 - 祝调试顺利)

例如,如果对象具有如下方法,则问题将不存在:

protected Object getIdentity() {
return this;
}

将定义 == 运算符,因此包装器也可以包装被包装对象的身份,而不是用自己的身份替换它。

关于java - 如何处理装饰器模式中的 'this' 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3919777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com