【发布时间】:2015-01-11 13:37:50
【问题描述】:
想请教一下这本书里鸭子的例子,这让我很困惑,感觉很矛盾。
问题
结论
他说“当 joe 向鸭子超类添加新行为时,他也在添加不适合 sume 鸭子类的行为”
但在结论中他添加了performFly() 和performQuack(); 有什么不同,因为我认为它与he was also adding behavior that was not appropiate for sume Duck subclasses 相同?
**图片取自《Head first design pattern》一书 ** 这个问题并不是说这本书不好,我认为这本书真的很好。这只是我在问一些我没有从书中得到的东西。
【问题讨论】:
-
他们所做的只是获取一个函数(quack)并将其分离到一个单独的类中。这有点复杂。最好创建一个名为“FlyingDucks”的鸭子类,然后将 Fly() 放在那里。然后,所有飞鸭子都将继承该类。或者,使 FLy() 抽象,强制每个子类定义飞行的含义。他们所做的工作更多,也更复杂。每个子类都需要选择一个 Fly 类来分配给 flyBehavior——即使它们不能飞行。
-
如果我说
the problem和the conclusion是矛盾的,我说得对吗?或者我只是不明白他的意思? -
最好的设计是意识到,(虚构的)问题考虑鸭子的方式,橡皮鸭不是鸭子——它不会飞,也不会游泳(除非你包括浮动)等。如果出于某种原因,你真的想要一个包含真正的鸭子和橡皮鸭的类,那么你应该在这些项目中寻找共同点作为你的问题空间,并将它们作为共同属性;不要从你空间中某些项目共有的属性开始,然后将其他项目强制适应它。
-
有一点需要注意,这是本书的第一章,还没有介绍他们可以用于这个解决方案的几个概念。很多时候他们说“这可能会做得更好,他们会在以后解决这个问题。” (释义)
标签: java php design-patterns