当只有一个实现类时,为什么要使用接口?

2022-09-01 21:16:52

我是编程新手,我正在学习Java。我只是想知道为什么我应该在只有一个实现类时使用接口?


答案 1

执行此操作是为了防止其他人访问您的实现类型。例如,您可以将实现类型隐藏在库中,授予类型包访问权限,然后将接口的实例返回给库的用户:

// This is what the users of your library know about the class
// that does the work:
public interface SomeInterface {
    void doSomethingUseful();
    void doSomethingElse();
}

// This is the class itself, which is hidden from your clients
class MyImplementation implements SomeInterface {
    private SomeDependency dependency = new SomeDependency();
    public void doSomethingUseful() {
        ...
    }
    public void doSomethingElse() {
        ...
    }
}

您的客户端获取的对象如下所示:

public class MyFactory {
    static SomeInterface make() {
        // MyFactory can see MyImplementation
        return new MyImplementation();
    }
}

当实现使用大量库时,此技巧变得很有用。您可以有效地将库的接口与其实现分离,以便用户不必了解库内部的依赖项。


答案 2

一个原因是保持开放/封闭原则,该原则规定您的代码应该开放以进行扩展,但关闭以进行修改。虽然您现在只有一个实现类,但随着时间的流逝,您很可能需要另一个不同的实现类。如果您事先将实现提取到接口中,则只需要编写另一个实现类ie。您不必修改一段完美工作的代码,从而消除了引入错误的风险。