gpt4 book ai didi

java - 这是 Java 中 ServiceLocator 模式的有效实现吗?

转载 作者:行者123 更新时间:2023-11-30 07:08:21 24 4
gpt4 key购买 nike

我有一个存在主义的怀疑。我在一些博客 ( Service Locator ) 中看到了 C++ 中 ServiceLocator 模式的实现。因此,我尝试在 Java SE 上扩展相同的实现(没有任何其他辅助框架)。请参阅下面的代码。

我的问题:这是 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;
}

}

最佳答案

基本上,我认为根据服务定位器模式的实现没有问题,除了缺乏缓存策略和使用单一访问方法,而不是像某些来源中所解释的那样为每个服务拥有唯一的 getter/setter。 This可能是一个更清楚的例子。

但它看起来像 terrible图案。这有什么必要呢?作为您的source建议,这是一种包含一组工作类(实现通用接口(interface))并在不使用 Singletons 的情况下向客户端公开的方法。 。

就可扩展性而言,我根本不认为这是一个好的解决方案。当您必须添加更多服务时会发生什么?你必须

  • 添加越来越多的方法(以您的方式)
  • 重现用于定位任何服务的所有 if-else 梯子(如我放置的源代码中所述)

看起来很糟糕。

如果您有一组向客户端公开相同功能的服务(即实现相同的接口(interface)),则公开它们并保留共同行为的最佳方法是

模式。

关于java - 这是 Java 中 ServiceLocator 模式的有效实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39668226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com