Java, как зарегистрировать экземпляр класса, чтобы любой класс мог найти
Предположим, у меня есть такой класс Java:
public class FibSolver{
int fib(int n){
//returns n-th term of fibonacci sequence
}
}
Я хочу зарегистрировать экземпляр этого класса (называемый FibService), так же, как служба RMI делает это при регистрации файлов.stub, чтобы другие классы, которым нужна эта служба, могли вызывать его, выполняя что-то вроде этого:
FibSolver f = (FibSolver) FindMyService("FibService");
int fib5 = f.fib(5);
Но я делаю это с самого начала и не хочу использовать RMI.
Также возможно иметь несколько различных классов, работающих как публичные сервисы, поэтому я предпочел бы иметь что-то вроде файла.stub, чем статические экземпляры каждого класса.
Как я могу сделать эту регистрацию / получение экземпляров сервисов?
2 ответа
Как насчет создания каждого "сервиса" как синглтона. Я бы создал интерфейс IMyService. Интерфейс будет иметь одну функцию getService. Каждый сервис будет иметь свой C'Tor как частный и реализовывать метод getService для предоставления отдельного экземпляра самого себя.
Затем зарегистрируйте все эти сервисы на глобальной карте с ее строковым именем. Карта может быть глобальным статическим членом, который, конечно, может получить доступ к статическим синглтон-геттерам каждого сервиса.
Имеет смысл?
Синглтон - способ сделать это. Простая реализация будет такой:
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 для назначения String для разных экземпляров и, возможно, для разных решателей.