我有一些像Clipboard
或ProcessRegister
这样的类,我只想在我的项目中运行一次,所以只有一个实例。
我现在的问题:如何在我的项目中最好地分发这些实例。
ATM既是单身,也是对象,他们使用getInstance()
上的获取实例。
我的另一个想法是创建一个类Project
,它有一些静态方法,如getProjectClipboard()
或getProcessRegister()
,可以返回实例。
分发它们的最佳方式是什么?那有什么模式吗?
问候丹尼斯
答案 0 :(得分:4)
主要有两种模式可供使用:服务定位器和依赖注入。服务定位器模式可能就是您所指的模式,无论您在哪里寻找这些对象的引用,您都可以从中心位置显式地检索它,对于简单的Java应用程序来说,这通常是一堆静态方法。这没关系,我认为这里没有一个更好的方法,只要确保每个单例只有一个静态方法,并且总是调用它。
几年前,心态的转变成为主流,依赖注入,以及它更受欢迎的框架......春天,有了这个范例,你需要在每个地方访问这些单身人士,你没有指明他们在哪里是,但你的对象得到正确的参考注入......我建议你研究一下依赖注入...可能是Spring,因为它是它的主流解决方案......我认为给你更多的春节问题是超出问题的范围,但那里如果你搜索Spring教程或类似的东西,在互联网上有很多文档......
基本上你要做的就是创造每个单身的弹簧豆,然后将弹簧注入你的物体......这种方法的警告是你的所有物体都必须由Spring建造,但是实践它不会有任何不利之处,它实际上会让你的生活在测试,维护方面更容易......
答案 1 :(得分:2)
单身人士,在语言层面完成时,是全球性的对象。这可能适用于小型项目,但在项目增长时不是最好的想法。可能会出现这样一种情况:突然一个单身人士相对于某个范围而言只是一个单身人士。然后你必须触摸对象和每次访问它。
如果你有Project
个对象或Application
个对象,那么这些对象是Project
- 相对单身人士的访问者的好地方。如果Project
只是一个提供大量static
访问器的类,它就像一个命名空间。这是一个清晰的胜利,将使重构更容易,但它在架构方面没有太大变化。
做单身人士的最佳方式不是在语言层面,而是在应用程序层面。非常有用的是像Spring这样的应用程序和依赖框架(其中bean的标准范围实际上是单例)。如果您稍后看到该对象不是单例,您只需更改配置 - 而不是对象本身。
答案 2 :(得分:0)
作为一个通常反对使用有状态单例的人(除了缓存目的),我会说:每个正在运行的应用程序都有这些类的一个实例,并将它们注入你需要的地方(参见依赖注入)。这也将允许您在同一JVM中使用不同的配置多次运行相同的应用程序。