Duck Simulator中的Head First设计模式问题在第1章中演练

问题描述 投票:0回答:1
我在调解示例以了解设计模式一章时遇到麻烦。我复制了本章的断言,解决方案和明显矛盾的几个图像。

问题:乔因让橡皮鸭在他的模拟器上四处飞行而受到谴责。他最终提出“接口如何?”在那里,MallordDuck(及其他)被声明为Duck类的子级,并实现一个或多个接口。

Joe's proposal to use an Interface

[他再次受到女主管的指责,女主管问:“当您必须改变所有48种鸭类的飞行行为时,会感觉如何?”主管右边的文本断言,它完全破坏了这些行为的代码重用]

Destroys code reuse

并且在对接口解决方案进行编程时,UML插图似乎需要与Joe所要求的重复代码数量相同。它似乎无法解决该问题。我能想到的唯一方法是将fly()和Quack()的最常用的实现放到接口中(这在Java中是不可能的-我想),并且可能是您不想这么做的即使有可能也要这样做。另外,它们似乎也隐藏在界面后面...

UML diagram illustrating programming to an interface

嗯,我要么考虑得太多,要么就是我不理解代码重复的主张,并且“这些行为不再隐藏在我们的Duck类中]

非常感谢任何澄清或进一步的解释。

谢谢Kial

design-patterns code-reuse
1个回答
0
投票
基本方法是确定是否有许多鸭子子类覆盖了Duck超类中的特定方法。在此示例中,作者确定了Duck中两个经常被覆盖的方法;在这种情况下-fry()和quack()。

每个方法重写都被推送到自己的类中。然后,将实现特定行为(例如嘎嘎声)变化的类统一在一个名称描述该组行为的接口下。

我相信您的问题的答案是,鸭子现在会将其飞行或嘎嘎叫行为委托给其中一个行为类中的一种方法。

因此,您现在拥有共享相同代码的几只鸭子。这肯定比让每只鸭子实现自己的代码要好,并且是主管所指的噩梦。

在学习本章时,您可能会发现委派是减少重复并更易于维护代码的秘密武器。

© www.soinside.com 2019 - 2024. All rights reserved.