我想问一下这本书中关于鸭子的例子,这让我感到困惑,并且感到矛盾。
他说:“当joe向鸭子超类添加新行为时,他还添加了不适用于sume Duck子类的行为”
但在结论中他添加了
performFly()
和performQuack();
有什么不同,因为我认为它与he was also adding behavior that was not appropiate for sume Duck subclasses
相同吗?**图片取自《 Head First》设计模式
**这个问题没有说明这本书不好,我认为这本书真的很好。这只是我在问我从书中得不到的东西。
最佳答案
最后,他将添加两个具有fly()
函数的新类。但是,该功能并不总是使鸭子飞起来。橡皮鸭不会飞,因此它们使用FlyNoWay
类的实例。其他可以飞行的鸭子使用FlyWithWings
类的实例。 flyBehavior
类中的Duck
字段可能会在构造函数中设置。
无论选择什么类,函数performFly()
都会调用fly()
函数。
正如kainaw在评论中所述,这是一个相当复杂的解决方案。但是,它仍然可以使用。假设您正在创建鸭子设计程序。如果用户选择鸭子是否可以飞行,则不能进行硬编码。您可以创建一个布尔值,但可能需要处理更复杂的情况,例如行为。您可能需要一个WildDuckBehavior
类和一个DomesticDuckBehavior
,每个类都有其有关如何操作的信息。基本上,本书中的示例是该用法的简化版本。