设计模式:关于“类型”的问题

时间:2011-01-03 03:30:04

标签: types design-patterns

请有人向我解释以下段落的含义是什么?这是“设计模式:可重复使用的OO软件的元素”的片段

  

对象界面的一部分可以用一种类型表征,其他部分用其他类型表征。两个相同类型的对象只需要共享其接口的一部分。接口可以包含其他接口作为子集。 - 设计模式 - 可重复使用的OO软件的元素,第13页

4 个答案:

答案 0 :(得分:6)

要理解这意味着你首先需要记住Gang of Four在1994年写这本书时,当时世界上绝大多数程序员都没有使用(并且从未听说过)面向对象的编程

Gamma,Helm,Johnson和Vlissides在这里基本上引入了接口的概念。我们的想法是,与对象交互的一段代码并不真正需要理解底层实现是如何发生的,并且两个不同的对象可以具有相同的接口但具有不同的实现。我们今天一直使用Java和Objective-C中的接口来做到这一点。

但它们更进一步,暗示一个对象可能有多个接口,一个来自一个类型(或接口),另一个来自另一个。您可以使用C ++中的多重继承或Java中的多个接口显式执行此操作,或者仅使用相同的命名约定。

答案 1 :(得分:2)

也许作者所说的是一个对象可以实现多个接口。例如,“RaceCar”类可以实现“Drivable”接口,同时还实现“PotentiallyDangerous”接口。

在这个例子中,RaceCar类可以实现“PotentiallyDangerous”接口声明的“useNitrous()”方法,并实现“Drivable”接口声明的“startIgnition()”方法。

很抱歉,没有任何反对RaceCar爱好者,但这是我可以让别人为我编辑的最好的汽车示例。


编辑 drachenstern:认为你可能会欣赏幽默编辑,随时回复。

答案 2 :(得分:0)

我认为,他是一个由类创建的方法Composite Object,它有两个父级提供不同的接口,每个接口对创建的对象都有用。在引用的链接中查找Java示例。

答案 3 :(得分:0)

似乎在描述类实现多个接口的能力。

例如,CarMotorcycle可能都会实现iVehicle,但它们每个都可能有其他方法和成员彼此唯一。例如,Car可能会实现iWindowedVehicle,而Motorcycle则不会。{/ p>

可能误导的报价的一部分是“同一类型的两个对象只需要共享......”(强调我的)。我假设他们在松散地使用单词类型,意思是,两个实现相同接口的对象(如CarMotorcycle都实现iVehicle,而不是相同的实际类,就像我的例子中的两个Cars一样。