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 для разных экземпляров и, возможно, для разных решателей.

Другие вопросы по тегам