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

时间:2012-02-13 11:54:20

标签: java

我有一些像ClipboardProcessRegister这样的类,我只想在我的项目中运行一次,所以只有一个实例。

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

ATM既是单身,也是对象,他们使用getInstance()上的获取实例。

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

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

问候丹尼斯

3 个答案:

答案 0 :(得分:4)

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

几年前,心态的转变成为主流,依赖注入,以及它更受欢迎的框架......春天,有了这个范例,你需要在每个地方访问这些单身人士,你没有指明他们在哪里是,但你的对象得到正确的参考注入......

我建议你研究一下依赖注入...可能是Spring,因为它是它的主流解决方案......我认为给你更多的春节问题是超出问题的范围,但那里如果你搜索Spring教程或类似的东西,在互联网上有很多文档......

基本上你要做的就是创造每个单身的弹簧豆,然后将弹簧注入你的物体......这种方法的警告是你的所有物体都必须由Spring建造,但是实践它不会有任何不利之处,它实际上会让你的生活在测试,维护方面更容易......

答案 1 :(得分:2)

单身人士,在语言层面完成时,是全球性的对象。这可能适用于小型项目,但在项目增长时不是最好的想法。可能会出现这样一种情况:突然一个单身人士相对于某个范围而言只是一个单身人士。然后你必须触摸对象和每次访问它。

如果你有Project个对象或Application个对象,那么这些对象是Project - 相对单身人士的访问者的好地方。如果Project只是一个提供大量static访问器的类,它就像一个命名空间。这是一个清晰的胜利,将使重构更容易,但它在架构方面没有太大变化。

做单身人士的最佳方式不是在语言层面,而是在应用程序层面。非常有用的是像Spring这样的应用程序和依赖框架(其中bean的标准范围实际上是单例)。如果您稍后看到该对象不是单例,您只需更改配置 - 而不是对象本身。

答案 2 :(得分:0)

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