首先,我认为java中的术语界面和界面之间存在差异,我不太了解它的区别。
我的第一个问题是,它说“编程到接口而不是实现”是指接口或java接口?
我正在阅读头脑设计模式,我把程序混淆到界面而不是编程到 实现。我的理解是SUBCLASS是具体的实现,INTERFACE是 SUPERCLASS(接口或抽象类或简单类)。
我的第二个问题是当他们说某个接口的程序是指代码是在INTERFACE(超类)那么子类只是继承了它?如果他们说程序到IMPLEMENTATION(子类)代码是在子类? 我认为这是因为术语“ReUse”,因为如果你改变你的代码并且你的代码在Subclass(具体实现)中,那么你需要改变你所有的子类代码,然后如果你把你的代码放在界面中你只需要更改该界面中的代码。
程序到接口的例子(请轻松一点),实现也会有所帮助。
第3个问题如果我们编程到接口的优点是什么,而不是我们编程到具体的类?
答案 0 :(得分:2)
首先,我必须说我没有看过那本书所以我不能肯定这是作者的意思,但这就是我理解这句话的方式。
我对它的含义的理解是你应该以一种方式编程,你将类和方法视为黑盒子,你不依赖于某些内部机制及其工作方式,但你更依赖于规范您或其他在接口,超类,文档等中定义的方法。这样您就可以轻松地更改实现,而不会影响代码库的其余部分。
一个很好的例子可能是存储一些数据序列,比方说名字。您可以定义函数以添加新名称,删除它们并打印它们。如果您在如下所示的界面中定义这些函数,则可以使用它们,而无需担心实现它们的类是使用数组还是列表来存储它们。
interface Sequence {
void add(String s);
void delete(String s);
void print();
}
现在您可以创建一个实现接口的SequenceAsList类,并在您的应用程序中使用它。让我们说一切正常,但你现在决定在某些地方你可能事先知道sequnce中的项目数量,你需要更好的性能,因此你想使用数组而不是列表。因此,您可以创建另一个类SequnceAsArray,它也实现了Sequence接口。现在,您需要在代码中更改的所有内容都是
Sequence someSequence = new SequenceAsArray();
而不是
Sequence someSequence = new SequenceAsList();
因为它们遵循相同的界面,所以很容易做到这一点。因此,我认为作者主要建议采用这种方法将类和方法作为黑盒子。