Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 设计模式:关于“设计模式”的问题;“类型”;_Types_Design Patterns - Fatal编程技术网

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

Types 设计模式:关于“设计模式”的问题;“类型”;,types,design-patterns,Types,Design Patterns,有人能给我解释一下下面这段话的意思吗?这是“设计模式:可重用OO软件的元素”中的一个片段 对象接口的一部分可以用一种类型表示,其他部分可以用其他类型表示。同一类型的两个对象只需要共享其接口的一部分。接口可以包含作为子集的其他接口。-设计模式-可重用OO软件的要素,第13页 也许作者所说的是一个对象可以实现多个接口。例如,“RaceCar”类可能实现“Drivable”接口,同时也实现“潜在危险”接口 在本例中,RaceCar类可能实现由“潜在危险”接口声明的“useNitrous()”方法,也可

有人能给我解释一下下面这段话的意思吗?这是“设计模式:可重用OO软件的元素”中的一个片段

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


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

在本例中,RaceCar类可能实现由“潜在危险”接口声明的“useNitrous()”方法,也可能实现由“Drivable”接口声明的“StartInitiation()”方法

对不起,对赛车爱好者没有什么不好的地方,但这是我能找到人为我编辑的最好的汽车示例



编辑drachenstern:虽然你可能会欣赏这本幽默的编辑,但请随意回复。

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

Gamma、Helm、Johnson和Vlissides在这里基本上介绍了接口的概念。其思想是,与对象交互的一段代码实际上不需要了解底层实现是如何发生的,两个不同的对象可以具有相同的接口,但具有不同的实现。我们现在一直在使用Java和Objective-C的接口来实现这一点


但它们更进一步,暗示一个对象可能有几个接口,一个来自一种类型(或接口),另一个来自另一种类型。您可以在C++中用多重继承显式地使用该方法,或者在java中使用多个接口,或者只需使用相同的命名约定。p> 我认为,他是由一个类创建的一种方法,该类有两个父类,提供不同的接口,每个接口都对所创建的对象有用。在参考链接中查找Java示例。

它似乎描述了类实现多个接口的能力

例如,一辆
汽车
和一辆
摩托车
可能都实现了
iVihicle
,但它们可能都有彼此唯一的其他方法和成员。例如,
汽车
可能实现
iIndowedVehicle
,而
摩托车
则不会


引文中有一部分可能具有误导性,即“同一类型的两个对象只需共享…”(我的重点)。我假设他们在那里松散地使用单词type,意思是实现相同接口的两个对象(像
汽车
摩托车
都实现了
iVehicle
,而不是像我的例子中的两辆
汽车

+1,尽管到目前为止我室友的斗牛犬非常友好。)哈哈,我个人看到事情变得非常糟糕,但我也听到非常热情的车主强烈表示他们相信他们的同伴和他们的生命。@drachenstern-Lol,不,这会好得多,也会让养狗的人不那么激动!我现在想不出一个好的汽车形容词:)非常抽象:)@jmort253,要是我是原创的,并且是我自己派生出来的就好了;)。。。你会注意到这实际上是你的帖子;)@drachenstern-我实际上在考虑进一步编辑,用[[INSERT_Non_HERE]]替换RaceCar,用[[INSERT_形容词_HERE]]替换RaceCar,等等。。。但我认为看到一个具体的例子有助于人们初步理解概念。我倾向于使用形容词作为接口的命名约定。例如,implements Taggable、implements Serializable或implements Runnable就是来自Java的一些示例。我建议将iHicle改为“Driveable”或“Runnable”。这个形容词似乎是一个很好的习惯。也许这足以将它区分为一个接口,但我确实喜欢它带有明显的前缀。以下是一些MSDN关于这个主题的指导原则:@pcloadletter——我认识的大多数Java开发人员都使用I前缀,但这只是因为我们的组织从一开始就这么做了。在Java中使用形容词对我来说似乎更有意义,因为这正是pro(Sun/Oracle)所使用的,而且更加一致。你看不到以C为前缀的类或以M为前缀的方法。例如,CMyClass会引起一些注意,但它与IMyClass更为一致。我确实喜欢用形容词来描述一个班级的目的。一辆可驾驶的汽车与一辆被打捞上来的汽车相比,能告诉我更多关于它的状况。@jmort253这一切都很好。就像我说的,我喜欢你的形容词,但我认为当某个东西是一个界面时,可以让它(更)明显。没有几十种不同类型的通常大写的用户定义标签,我认为一些组织添加前缀来帮助区分这两种标签是有好处的。我还认为指出这些概念的时代很好,因为这有助于正确看待它们。虽然今天的许多技术很快就过时了,但像这样的概念性想法似乎经得起时间的考验。@jmort253-谢谢你的好意评论。