2

可能重复:
“编程到接口”是什么意思?

首先,我认为java中的interface和interface这个术语是有区别的,我不太明白有什么区别。

当它说“编程到接口而不是实现”时,我的第一个问题是指接口还是 java 接口?

我正在阅读 headfirst 设计模式,我对程序到接口而不是程序到实现感到困惑。我的理解是子类是具体的实现,接口是超类(接口或抽象类或简单类)。

我的第二个问题是,当他们对接口说程序时,这意味着代码在接口(超类)中,然后子类只是继承了它?如果他们说实现(子类)的程序代码在子类中?我之所以考虑这一点是因为“重用”一词,因为如果您更改代码并且您的代码在子类(具体实现)中,那么您需要更改所有子类代码,然后如果您将代码放在接口中,您只需要更改该界面中的代码。

接口和实现的程序示例(请使其简单)也会有所帮助。

第三个问题如果我们编写一个接口比编写具体类有什么优势?

4

1 回答 1

2

首先我必须说我没有读过那本书,所以我不能肯定这就是作者的意思,但这就是我对这句话的理解。

我对这意味着什么的理解是,您应该以一种将类和方法视为黑匣子的方式进行编程,您不依赖于某些内部机制及其工作方式,而是依赖于您或某人的规范else 在接口、超类、文档等中定义。这样,您可以轻松更改实现,而不会影响代码库的其余部分。

一个很好的例子可能是存储一些数据的序列,比如说名字。您可以定义函数来添加新名称、删除它们并打印它们。如果您在如下面的接口中定义这些函数,则可以使用它们,而不必担心实现它们的类是使用数组还是列表来存储它们。

interface Sequence {
    void add(String s);
    void delete(String s);
    void print();
}

现在您可以创建一个实现接口的类 SequenceAsList 并在您的应用程序中使用它。假设一切正常,但您现在决定可能在某些地方您提前知道序列中的项目数并且您需要更好的性能,因此您想使用数组而不是列表。因此,您可以创建另一个同样实现 Sequence 接口的类 SequnceAsArray。现在您需要在代码中更改的所有内容都是

Sequence someSequence = new SequenceAsArray();

代替

Sequence someSequence = new SequenceAsList();

因为他们遵循相同的界面,所以很容易做到这一点。因此我认为作者主要建议的是采取这种将类和方法视为黑匣子的方法。

于 2012-04-21T22:31:15.360 回答