java - 用于文件写入和模拟数据库的单例与静态类

标签 java database singleton static-classes

我确实知道这个问题以前已经被问过很多次了,但我无法从中得到我想要的答案。这个问题是,“我应该使用单例还是包含所有静态成员和方法的类?”

我只需要一个实例来实现我想要实现的目标,并且两种方法都可以同样有效。那么设计方面,有没有更好的方法呢?或者我应该使用其中任何一个吗?

第一种情况:

我正在尝试为我的程序编写一个“数据库”类。这个“数据库”使用其他对象来存储和组织数据。然而,数据库本身对数据进行排序和搜索。鉴于它是一个数据库,我只想要它的一个实例。我不想访问多个位置来获取数据。数据库本身会处理这个问题。

注意 - 我已经将其写为枚举Data.BASE。它使用方法handle(String) 来获取字符串命令并通过调用其他方法来操作其中的数据。我是否应该将 Data.BASE 包装在“静态类”中并使用它与 Data.BASE 进行通信? (我直接与Data.BASE通信)

第二种情况:

我计划创建一个类,用于从我的程序中加载和保存设置,名为SettingsManager。它将使用,而不是实现Savable接口(interface)来操作具有可保存设置的对象。 SettingsManager 将在程序开始和结束时被调用。但是,它只能操作添加到其中的对象 (SettingsManager.add(Savable))。就像第一个案例一样,我不需要它的多个实例。我只想要一个实例来跟踪写入和保存首选项。

有没有我想不到的更好的方法来解决这个问题?

我确实认识到这不是一个特定的编码问题。然而,我觉得这些都是重要的设计和风格问题,我将来肯定需要在其他程序中引用。

最佳答案

我会使用依赖注入(inject)。
如果您只需要一个数据库连接器对象,请创建一次并将其传递给需要它的组件。
仅仅因为您只需要一个实例并不意味着您必须使用单例模式/反模式。

关于java - 用于文件写入和模拟数据库的单例与静态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24809246/

相关文章:

c# - ORA-06550 调用 Oracle 存储过程时参数数量或类型错误

singleton - 如何在 Guice 上找到所有实现特定类型的单例?

javascript - 在 Javascript 中使用 Java 库

java - 将业务逻辑添加到 spring-data-rest 应用程序

Java Play : bindFromRequest() not working

java - 在java中替换特殊单词的最佳方法

java - 降低服务器端报告占用过多内存风险的最佳方法

java - 如何创建其中包含 MySQL 数据库的可执行文件?

c++ - Qt Quick2为单例类类型创建qmlRegisterSingletonType

C++ 为什么我的单例不维护成员值