我目前正在将 C 库移植到 Java。 C 库连接到外部设备并提供配置设备和接收数据的函数。我的设计核心是一个 Connection
类,它封装了与设备的连接,并提供使用 JNA 生成的低级 C API 映射。
由于大多数 C 库不能很好地转换为 Java 的 OO 世界(包含 100 多个函数的单个头库),因此我有几个“管理器”类可以提供对大多数功能的访问。
创建多个此类是没有意义的,因为 C 库仅管理所有资源(配置、数据缓冲区等)的一种资源。因此,我想为我的 Java 类实现 Singleton 模式(也有效地向我的新 Java 库的用户发出信号,表明整个系统中只有一个 Manager 对象)。
此外,我希望能够使用外部配置文件配置这些管理器类。我以前从未实现过配置实用程序,所以我真的不知道该把它放在哪里。
最后,我的所有 Manager 类都需要对 Connection
对象的引用。
所以我需要一个设计,让我能够:
- 使我的 Java 类独一无二(单例模式)
- 注入(inject)我的
Connection
对象 - 使用配置文件配置我的类
有什么想法吗?
最佳答案
对于前两点,类似这样的事情就可以解决问题:
public class Connection{
private static Connection instance = null;
private String connectionString;
protected Connection() {
}
public static Connection getInstance() {
if(instance == null) {
instance = new Connection();
}
return instance;
}
public void setConnectionString(String connectionString){
this.connectionString = connectionString;
}
public String getConnectionString(){
return this.connectionString;
}
}
这是java中单例的一个经典例子。构造函数是 protected
,因此您无法使用new
关键字来实例化它。相反,您可以像这样使用它:
Connection con = Connection.getInstance();
getInstance()
负责实例化并确保单例只存在一个实例。例如,这个:
Connection con = Connection.getInstance();
con.setConnectionString("foobar");
Connection con2 = Connection.getInstance();
System.out.println(con2.getConnectionString());
将打印foobar
第三点,我建议您引用this question已经得到了解答。
关于java - 单例模式、配置和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37928642/