Java 如何注册一个 class 实例以便任何 class 都可以找到
Java how to register a class instance so that any class can find
假设我有一个 Java class 这样的:
public class FibSolver{
int fib(int n){
//returns n-th term of fibonacci sequence
}
}
我想注册这个class的一个实例(称为FibService),就像注册.stub文件时RMI服务一样,以便其他需要这个服务的classes可以调用它做这样的事情:
FibSolver f = (FibSolver) FindMyService("FibService");
int fib5 = f.fib(5);
但我从一开始就这样做,不想使用 RMI。
也可以有多个不同的 classes 作为 public 服务工作,所以我宁愿有类似 .stub 文件的东西,而不是每个 class 的静态实例.
我怎样才能做到 registering/retrieving 服务实例?
如何将每个 "service" 创建为 singleton。
我会创建一个 IMyService 的接口。
该接口将具有一个函数 getService。
每个服务都将其 C'Tor 设为私有,并实现 getService 方法以提供其自身的单个实例。
然后使用字符串名称在全球地图上注册所有这些服务。
该映射可以是一个全局静态成员,它当然可以访问每个服务的静态单例 getter。
有道理吗?
Singleton 是执行此操作的方法。一个简单的实现是这样的:
public class FibSolver {
private static FibSolver instance;
public static FibSolver getInstance() {
if (instance == null) {
instance = new FibSolver();
}
return instance;
}
private FibSolver() {
}
int fib(int n){
//returns n-th term of fibonacci sequence
}
}
您通过调用获得实例:
FibSolver f = FibSolver.getInstance();
改进的版本可以使用静态 HashMap 为不同的实例和可能不同的求解器分配一个字符串。
假设我有一个 Java class 这样的:
public class FibSolver{
int fib(int n){
//returns n-th term of fibonacci sequence
}
}
我想注册这个class的一个实例(称为FibService),就像注册.stub文件时RMI服务一样,以便其他需要这个服务的classes可以调用它做这样的事情:
FibSolver f = (FibSolver) FindMyService("FibService");
int fib5 = f.fib(5);
但我从一开始就这样做,不想使用 RMI。
也可以有多个不同的 classes 作为 public 服务工作,所以我宁愿有类似 .stub 文件的东西,而不是每个 class 的静态实例.
我怎样才能做到 registering/retrieving 服务实例?
如何将每个 "service" 创建为 singleton。 我会创建一个 IMyService 的接口。 该接口将具有一个函数 getService。 每个服务都将其 C'Tor 设为私有,并实现 getService 方法以提供其自身的单个实例。
然后使用字符串名称在全球地图上注册所有这些服务。 该映射可以是一个全局静态成员,它当然可以访问每个服务的静态单例 getter。
有道理吗?
Singleton 是执行此操作的方法。一个简单的实现是这样的:
public class FibSolver {
private static FibSolver instance;
public static FibSolver getInstance() {
if (instance == null) {
instance = new FibSolver();
}
return instance;
}
private FibSolver() {
}
int fib(int n){
//returns n-th term of fibonacci sequence
}
}
您通过调用获得实例:
FibSolver f = FibSolver.getInstance();
改进的版本可以使用静态 HashMap 为不同的实例和可能不同的求解器分配一个字符串。