这是关于在静态接口方法中使用静态工厂方法的设计问题。我正在寻找使用这种模式的改进或缺点。
public interface SampleService {
// 1) do work
void doWork();
static SampleService create(final String service) {
// 2) Dispatch to factory method to get correct implementation
return Factory.create(service);
}
class Factory {
private static SampleService create(final String service) {
// 3) return one of many possible implementations
return new DefaultSampleService();
}
}
class DefaultSampleService implements SampleService {
@Override
public void doWork() {
// 4) performs work
}
}
}
在最初的实现中,调用者会调用
SampleService.Factory.create
现在他们称之为
SampleService.create
看起来更干净,更具可读性。 那么我们可以改进什么呢?
答案 0 :(得分:0)
我建议不将工厂置于接口中,原因如下:
违反开放 - 封闭原则(https://en.wikipedia.org/wiki/Open/closed_principle)。
使用界面SampleService
的客户端并不会经常更改界面(文件)。这始终是错误的来源。
因此,接口中的工厂方法不是一种好的编程风格(在我看来)。我建议将Interface和Factory分成两个不同的类。可能的客户不必知道是否创建了新的子类型,并且以这种方式,程序的 volatile 部分封装在Factory类中。