Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在代码中的许多地方保留对对象的引用_Java_Reference - Fatal编程技术网

Java 在代码中的许多地方保留对对象的引用

Java 在代码中的许多地方保留对对象的引用,java,reference,Java,Reference,我想知道这个问题的最佳解决方案(可能是模式): 我有两个类引用同一个对象 class A { ... } class X { A objectA; } class Y { A objectA; } 问题是如何在一个类X或Y分配新对象时保持这些引用。 比如说 class Y { A objectA; private void doSomething(){ objectA = new A(); } } 此时,对象X已弃用引

我想知道这个问题的最佳解决方案(可能是模式): 我有两个类引用同一个对象

class A {
    ...
}
class X {
    A objectA;
}

class Y {
    A objectA;
}
问题是如何在一个类X或Y分配新对象时保持这些引用。 比如说

class Y {
    A objectA;
    private void doSomething(){
          objectA = new A();  
    }
}
此时,对象X已弃用引用,但我希望它注意到此更改。 相互传递引用是不可接受的,因此对象X不能意识到对象Y

编辑:
这种模式可以在我的应用程序中存在不止一次,因此我不能使用单例,而不是在
X
Y
中直接引用
a
,将对象
a
存储在
X
Y
都可以访问的另一个类中(例如
ObjectStorage

您可以使用
单例设计模式


如果您需要obejct,那么为什么要将新对象指定给同一引用。为什么不为新对象创建一个新的引用。

面向对象编程的关键原则之一是,您应该尝试创建彼此交互的松散耦合对象。在您的示例中,类X和Y都与类A紧密耦合。这不一定是一件坏事,但始终值得问问您自己这两个类是否都需要一个成员变量(objectA)。如果答案是肯定的,那么还有第二个问题也值得问:类X和类Y是否都需要引用类a的同一个对象实例

这个问题的答案通常是否定的。换句话说,看到多个类依赖于一个公共类并不罕见,但并不要求每个类都需要引用该公共类的同一实例

但是,如果这个问题的答案是肯定的,那么您有一些选择。单身是一种选择,但通常还有其他更好的选择-