我想问一下这本书中关于鸭子的例子,这让我感到困惑,并且感到矛盾。

  • 问题
  • 结论

  • 他说:“当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,每个类都有其有关如何操作的信息。基本上,本书中的示例是该用法的简化版本。

    07-26 08:31