我已阅读有关Factory Pattern的信息,它可用于根据某些条件动态创建对象。但是,根据这些条件创建Service类是一种规范。
class ServiceFactory {
DummService1 A;
DummService2 B;
DummService3 C;
Service getService(String condition) {
switch condition:
case A:
return new A()
case B:
return new B()
case C:
return new C()
}
}
class DummyService1 implements Service{}
class DummyService2 implements Service{}
class DummyService3 implements Service{}
以上是一个例子。另外,我试图在Spring中执行此操作,因此这些服务类是Autowired(不希望使用Spring Specific语法使上述示例复杂化)。
答案 0 :(得分:1)
根据这些条件创建Service类是一种规范。
这是创建服务的一种方式。另一种可能是使用SPI和ServiceLoader
。但是,您可以在服务本身中引入一种方法,以确定它是否合适。 E.g。
public Service {
public boolean isSuitable(String condition);
// ... Service methods
}
然后你可以用这种方式查找正确的服务
Service suitableService = null;
for(Service serviceCandidate : ServiceLoader.load(Service.class)){
if(serviceCandidate.isSuitable(condition)){
suitableService = serviceCandidate;
break;
}
}
在Java 8中,您可以使用方法引用映射替换开关:
private Map<String, Supplier<Service>> services = new HashMap<>();
public ServiceFactory() {
services.put("A", A::new);
services.put("B", B::new);
services.put("C", C::new);
}
Service getService(String condition) {
Supplier<Service> supplier = services.get(condition);
if(supplier != null) {
return supplier.get();
}
return null;
}
另外,我试图在Spring中执行此操作,因此这些服务类是Autowired
在春季执行此操作时,通常使用@Qualifier
代替条件。
@Autowired
@Qualifier("A")
private Service service;