我有一個存在的懷疑。我在一些博客中看到了C++中ServiceLocator模式的實現(Service Locator)。所以,我試圖在Java SE上擴展相同的實現(沒有任何其他輔助框架)。請參閱下面的代碼。這是在java中ServiceLocator模式的有效實現嗎?
我的問題:這是在java中的ServiceLocator模式的有效實現?如果不是這樣的話,那麼在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