Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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 - Fatal编程技术网

Java 在项目内分发对象/类的更好方法

Java 在项目内分发对象/类的更好方法,java,Java,我有一些类,比如Clipboard或ProcessRegister,我只想在项目中运行一次,所以只有一个实例 我现在的问题是:如何在我的项目中最好地分发这些实例。 ATM都是单例和对象,它们通过getInstance()获取实例 我的另一个想法是创建一个类Project,它有一些静态方法,如getProjectClipboard()或getProcessRegister(),返回实例 分发它们的最佳方式是什么?这有什么模式吗 欢迎Dennis,作为一个通常反对使用有状态单例(缓存除外)的人,我想

我有一些类,比如
Clipboard
ProcessRegister
,我只想在项目中运行一次,所以只有一个实例

我现在的问题是:如何在我的项目中最好地分发这些实例。

ATM都是单例和对象,它们通过
getInstance()
获取实例

我的另一个想法是创建一个类
Project
,它有一些静态方法,如
getProjectClipboard()
getProcessRegister()
,返回实例

分发它们的最佳方式是什么?这有什么模式吗


欢迎Dennis,作为一个通常反对使用有状态单例(缓存除外)的人,我想说:每个正在运行的应用程序都有一个这些类的实例,并将它们注入到需要它们的地方(请参阅依赖项注入)。这也将允许您在同一JVM中使用不同配置多次运行同一应用程序。

作为通常反对使用有状态单例(缓存除外)的人,我会说:每个正在运行的应用程序都有一个此类实例,并在需要的地方注入它们(参见依赖注入)。这也将允许您在同一JVM中使用不同配置多次运行同一应用程序。

可以使用的模式主要有两种:服务定位器和依赖项注入。服务定位器模式可能就是您所指的模式,您可以在任何地方查找这些对象的引用从一个中心位置显式地检索它,对于简单的java应用程序,通常是一堆静态方法。这没关系,我认为这里没有更好的方法,只要确保每个单例只有一个静态方法,并且始终调用它

几年前,一种心态的转变成为主流,依赖注入,以及它更流行的框架…Spring,有了这个范例,在你需要访问这个单例的每个地方,你不需要指定它们在哪里,但是你的对象得到了正确的引用注入

我建议您研究依赖注入…可能还有Spring,因为它是主流的解决方案…我认为让您更多地了解Spring超出了问题的范围,但是如果您搜索Spring教程或类似内容,Internet上有很多文档


基本上,您要做的是将每个单例创建为SpringBean,然后让spring将它们注入到您的对象中……这种方法的警告是,您的所有对象都必须由spring构建,但实际上它并不认为有任何缺点,它实际上会使您的测试、维护变得更容易。..

可以使用的模式主要有两种:服务定位器和依赖项注入。服务定位器模式可能就是您所指的模式,在您查找这些对象的引用的任何地方,您都可以显式地从中心位置检索它,对于简单的java应用程序,这通常是一组静态的方法。这没关系,我不认为这里有更好的方法,只要确保每个单例只有一个静态方法,并且总是调用它

几年前,一种心态的转变成为主流,依赖注入,以及它更流行的框架…Spring,有了这个范例,在你需要访问这个单例的每个地方,你不需要指定它们在哪里,但是你的对象得到了正确的引用注入

我建议您研究依赖注入…可能还有Spring,因为它是主流的解决方案…我认为让您更多地了解Spring超出了问题的范围,但是如果您搜索Spring教程或类似内容,Internet上有很多文档


基本上,您要做的是将每个单例创建为SpringBean,然后让spring将它们注入到您的对象中……这种方法的警告是,您的所有对象都必须由spring构建,但实际上它并不认为有任何缺点,它实际上会使您的测试、维护变得更容易。..

单例,在语言级别完成时,是全局对象。这可能适用于小项目,但在项目增长时不是最好的主意。可能会出现这样一种情况:突然之间,单例仅是相对于某个范围的单例。然后,您必须触摸该对象以及对它的所有访问

也就是说,如果你有一个
项目
对象或
应用程序
对象,这些都是拥有
项目
相对单例访问器的好地方。如果
项目
只是一个提供大量
静态
访问器的类,那么它就像一个名称空间。这在清晰性上是一个胜利,并且将使重构变得容易但是它在架构方面没有太大的变化


实现单例的最佳方法不是在语言级别,而是在应用程序级别。非常有用的是应用程序和依赖性框架,如Spring(Bean的标准范围实际上是单例)。如果您以后发现对象不是单例对象,您只需更改配置,而不是对象本身。

单例对象在语言级别完成时是全局对象。这可能适用于小型项目,但在项目增长时不是最好的主意。可能会出现一种情况,即突然间单例对象只是单例相对物在一定的范围内,然后你必须触摸这个物体和它的每一个入口

也就是说,如果您有一个
项目
对象或
应用程序
对象,这些都是访问
项目
相对单例的好地方