Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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
Design patterns 设计模式:什么是类型_Design Patterns_Types - Fatal编程技术网

Design patterns 设计模式:什么是类型

Design patterns 设计模式:什么是类型,design-patterns,types,Design Patterns,Types,这是一个非常基本的问题,但在阅读了《设计模式:可重用OO软件的元素》一书之后,我有点困惑 书中说, “对象的类型仅指其 接口请求集,该请求集 它可以响应。一个对象可以有 许多类型,以及不同类型的对象 类可以具有相同的类型。” 有人能更好地解释一下a型是什么吗?我也不明白为什么一个对象可以有多种类型……除非这本书提到多态性……从这个意义上讲,类型不一定是对象的实际类型 它讨论的是对象所提供服务的类型。这可能是具有多个继承的多个类型,也可能是具有多个接口的实际类型 例如,在Java下,您可能有一个应

这是一个非常基本的问题,但在阅读了《设计模式:可重用OO软件的元素》一书之后,我有点困惑

书中说,

“对象的类型仅指其 接口请求集,该请求集 它可以响应。一个对象可以有 许多类型,以及不同类型的对象 类可以具有相同的类型。”


有人能更好地解释一下a型是什么吗?我也不明白为什么一个对象可以有多种类型……除非这本书提到多态性……

从这个意义上讲,类型不一定是对象的实际类型

它讨论的是对象所提供服务的类型。这可能是具有多个继承的多个类型,也可能是具有多个接口的实际类型

例如,在Java下,您可能有一个应用程序类(及其实际类型),它还提供一个独特的用户输入界面(键盘和鼠标I/O)

这是一个对象具有多种类型的示例


具有相同“类型”的多个对象的示例(在您的引用中)是您的经典几何图形类,如
正方形
矩形
圆形
等等。所有这些不同的对象都可能具有相同的“类型”,因为它们的接口由
setPosition()
setSize()
drawShape()
将类型视为契约。假设你有一个动物园,里面有很多动物

好吧,对于你拥有的任何动物,你都可以确保它们有一个指定的笼子(例如)。如果动物是哺乳动物,你可以了解哺乳动物的具体情况。如果他们是游泳运动员,你可以得到他们所游的水的温度等等

在本例中,您将拥有许多类型的IEntity、IMammal和ISwimmer以及给定的对象,例如企鹅的IEntity和ISwimmer类型。请记住类型contract的相似性,这就是为什么类型说明了给定对象可以响应的请求,就像一个contract说明了对于一个特定的contract任务,您可以做什么和不能做什么一样


希望我的回答有帮助

可能是一个有助于澄清的例子。我假设类是一种特殊的类型

  class Dog : Animal {...};
  class Fish : Animal {...};
  Dog lassie = new Dog();  
        // An object can have many types: 
        // lassie is a dog and an Animal

  Fish nemo = new Fish();  
    // objects of different classes can have the same type: 
    // lassie and nemo are animals