Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop - Fatal编程技术网

Java 如何使对象对其他类全局可用

Java 如何使对象对其他类全局可用,java,oop,Java,Oop,在我的主要方法中,我首先创建一个对象X 稍后在同一个主方法中,我创建了多个对象(A、B和C),它们都需要知道对象X。现在,我将对对象X的引用传递到类A、B和C的构造函数中 这很好,但我想知道,本着面向对象的精神,是否有更好的方法使对象X全局可供其他类使用?在“面向对象的精神”中,没有任何东西可以使对象全局可用,而不是使需要它的对象全局可用。事实上,良好编程的精神期望您将对象仅提供给那些需要它们的人。如果使对象全局可用,则无法保证任何其他对象在任何时候都会对其进行修改。即使它是不可修改的,您对该对

在我的主要方法中,我首先创建一个对象X

稍后在同一个主方法中,我创建了多个对象(A、B和C),它们都需要知道对象X。现在,我将对对象X的引用传递到类A、B和C的构造函数中


这很好,但我想知道,本着面向对象的精神,是否有更好的方法使对象X全局可供其他类使用?

在“面向对象的精神”中,没有任何东西可以使对象全局可用,而不是使需要它的对象全局可用。事实上,良好编程的精神期望您将对象仅提供给那些需要它们的人。如果使对象全局可用,则无法保证任何其他对象在任何时候都会对其进行修改。即使它是不可修改的,您对该对象的用途的控制也较少,因此必须对维护进行更严格的控制

在这种情况下,正确的做法正是你所做的。显式地传递对对象的引用,最好是在其构造函数中。如果对象在构造时可用,那么这样做完全有意义


如果您发现在其他一些情况下确实需要使一个类在全球范围内可用,并且您不可能找到绕过它的方法,那么单例可能是最好的方法。但是,只有在没有其他方法的情况下才能这样做。

处理依赖关系的干净方法是使用依赖注入。这就是你正在做的,手动操作。但是一个DI框架可以为你做这件事。不是真的,不。你可以考虑一个-这将基本上做你正在为你做的事情。他们可能需要知道X的一些属性,而不是完整的对象X,对吗???侯赛因:这怎么改变了这个问题?将
X
替换为
Y
,其中
Y
X
的一个属性,您会遇到完全相同的问题。如果它是一个属性,它可以由某个全局最终变量设置,该变量是X设置的,但其他对象只会读取谢谢您。对我来说是有意义的:-)我的问题是,我只知道OOP是危险的,但还没有很好地把握全局,让我决定我所做的事情是否遵循OOP原则。看起来我做对了。