mon*_*res 5 java design-patterns decorator
我在使用装饰器模式的我的类中遇到了问题.
当内部对象在调用其他对象时使用"this"引用时,会出现问题.这会导致来自接收"this"引用的对象的所有调用直接发送到内部对象,而不会通过外部第一个.
解决这个问题的常用方法是什么?
谢谢.
对象有一个隐含的值:它们的身份(可以通过应用来测试==)。当你包装它们时,你有效地隐藏了该身份(更糟糕的是,你还暴露了一个潜在的误导性身份,即包装器本身的身份)。因此,一个明显的方法是通过另一种方式(显式地)暴露对象的身份来弥补这一点。例如,您可能会引入一个方法Object getIdentity(),该方法返回一个真正代表预期身份的对象,并允许==对其进行应用。
但最大的缺点是您仍然允许==装饰器本身存在以下危险:
identity == decorator而不是identity == decorator.getIdentity())例如,如果对象具有如下方法,则问题将不存在:
protected Object getIdentity() {
return this;
}
Run Code Online (Sandbox Code Playgroud)
将定义哪个==运算符,因此包装器还可以包装被包装对象的标识,而不是用自己的标识替换它。