为什么“设计模式”说'两个相同类型的对象只需要共享其部分接口'?

时间:2011-09-01 12:31:57

标签: oop design-patterns

GoF书中的第13页有一个声明:

Two objects of the same type need only share parts of their interfaces.

我不确定我理解这句话。

编辑:完整的引用可能确实有助于理解

  

类型是用于表示特定接口的名称。我们说的是   如果对象具有“窗口”类型,则它接受所有请求   在名为“Window”的接口中定义的操作。对象可能有   许多类型,和广泛不同的对象可以共享一种类型。部分的   对象的界面可以用一种类型和其他部分来表征   通过其他类型。 两个相同类型的对象只需要共享部分   他们的接口。接口可以包含其他接口作为子集。

3 个答案:

答案 0 :(得分:8)

在他们的语言中,对象 interface 是对象的整个公共契约(不要认为语言实现在这里)。

  

对象定义的所有签名集称为接口   对象。

类型更像是您所认为的声明的接口....

  

类型是用于表示特定接口的名称。

想象:

public class Foo : IBar, IBaz {}

public class Fuz : IBar, IBuz {}

Foo和Fuz都是IBar“类型”,但它们只共享各自接口的那个方面。

答案 1 :(得分:1)

更完整的引用是:

  

类型是用于表示特定接口的名称。我们说的是   如果对象具有“窗口”类型,则它接受所有请求   在名为“Window”的接口中定义的操作。一个对象可能   有很多类型,而且广泛不同的对象可以共享一种类型。部分   对象的界面可以用一种类型和另一种来表征   其他类型的零件。两个相同类型的对象只需要共享   他们的接口的一部分。接口可以包含其他接口   子集。

很明显,我认为,这是在谈论多重继承。例如,您可能TextWindowMenuWindow都将Window与其他类一起子类化。在他们使用的意义上,两个对象都可以被认为具有“类型”Window,并且它们都将实现与该类型相关联的操作 - 它们都将具有Window的方法。但是TextWindow也可能是TextEditor的子类,而MenuWindow没有,所以他们的方法总集(他们所谓的“接口”)是不一样的,即使Window部分重叠。

http://www.uml.org.cn/c++/pdf/DesignPatterns.pdf

答案 2 :(得分:-1)

我不知道这意味着什么,因为我没有这本书。但是接口是类的方法签名,与公共变量相结合。作为特定类型的子类型,也是其父类的一种类型,它可以具有父类不具有的方法,因此它只共享父类的一些接口。我不知道这实际上是不是在谈论它。