У меня есть экзистенциальное сомнение. Я видел реализацию шаблона ServiceLocator на C++ в каком-то блоге (Service Locator). Итак, я пытаюсь расширить ту же реализацию на Java SE (без какой-либо другой вспомогательной структуры). См. Ниже код.Действительно ли это реализация шаблона ServiceLocator в java?
Мой вопрос: Является ли это допустимой реализацией шаблона ServiceLocator в java ?. Если это не так, то какая самая простая (примерная) реализация для этого шаблона в java?
/**
* Where MyService1 and MyService2 are interfaces.
*/
public final class MyServiceLocator {
private static MyService1 service1;
private static MyService2 service2;
private MyServiceLocator() {
// No op
}
public static MyService1 getMyService1() {
if (service1 == null) {
throw new NullMyService1Exception();
}
return service1;
}
public static MyService2 getMyService2() {
if (service2 == null) {
throw new NullMyService2Exception();
}
return service2;
}
public static void provideService1(MyService1 service1) {
// Initialize Service1
...
MyServiceLocator.service1 = service1;
}
public static void provideService2(MyService2 service2) {
// Initialize Service2
...
MyServiceLocator .service2 = service2;
}
}
Вы знаете о [java.util.ServiceLoader классе] (http://docs.oracle.com/javase/8/docs/api/java/util/ServiceLoader.html), правильно? Если вы пытаетесь сделать это по академическим соображениям, то точка локатора службы должна либо иметь четко определенный алгоритм для обнаружения определенного типа службы, либо иметь публичный реестр служб, с помощью которого библиотека может зарегистрировать себя. Ваш код, похоже, тоже не работает. – VGR
Экзистенциальные сомнения? Звучит довольно серьезно ... – shmosel
Привет @shmosel, только способ сказать, что у меня много сомнений в этом, никто не умрет за это. Спасибо за внимание. – Ariel