接口内的静态工厂方法

时间:2018-01-26 16:16:43

标签: java oop design-patterns

这是关于在静态接口方法中使用静态工厂方法的设计问题。我正在寻找使用这种模式的改进或缺点。

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

看起来更干净,更具可读性。 那么我们可以改进什么呢?

1 个答案:

答案 0 :(得分:0)

我建议将工厂置于接口中,原因如下:

违反开放 - 封闭原则(https://en.wikipedia.org/wiki/Open/closed_principle)。

使用界面SampleService的客户端并不会经常更改界面(文件)。这始终是错误的来源。

因此,接口中的工厂方法不是一种好的编程风格(在我看来)。我建议将Interface和Factory分成两个不同的类。可能的客户不必知道是否创建了新的子类型,并且以这种方式,程序的 volatile 部分封装在Factory类中。