Java, как зарегистрировать экземпляр класса, чтобы любой класс мог найти - PullRequest
0 голосов
/ 06 октября 2018

Предположим, у меня есть такой класс 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 ]

0 голосов
/ 07 октября 2018

Синглтон - способ сделать это.Простая реализация будет выглядеть так:

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

0 голосов
/ 06 октября 2018

Как насчет создания каждой "услуги" в виде синглтона .Я бы создал интерфейс IMyService.Интерфейс будет иметь одну функцию getService.Каждый сервис будет иметь свой C'Tor как частный и реализовывать метод getService для предоставления отдельного экземпляра самого себя.

Затем зарегистрируйте все эти сервисы на глобальной карте со своим строковым именем.Карта может быть глобальным статическим членом, который, конечно, может получить доступ к статическим синглтон-геттерам каждого сервиса.

Имеет смысл?

...