问题:乔因让橡皮鸭在他的模拟器上四处飞行而受到谴责。他最终提出“接口如何?”在那里,MallordDuck(及其他)被声明为Duck类的子级,并实现一个或多个接口。
[他再次受到女主管的指责,女主管问:“当您必须改变所有48种鸭类的飞行行为时,会感觉如何?”主管右边的文本断言,它完全破坏了这些行为的代码重用]
并且在对接口解决方案进行编程时,UML插图似乎需要与Joe所要求的重复代码数量相同。它似乎无法解决该问题。我能想到的唯一方法是将fly()和Quack()的最常用的实现放到接口中(这在Java中是不可能的-我想),并且可能是您不想这么做的即使有可能也要这样做。另外,它们似乎也隐藏在界面后面...
嗯,我要么考虑得太多,要么就是我不理解代码重复的主张,并且“这些行为不再隐藏在我们的Duck类中]
非常感谢任何澄清或进一步的解释。
谢谢Kial
每个方法重写都被推送到自己的类中。然后,将实现特定行为(例如嘎嘎声)变化的类统一在一个名称描述该组行为的接口下。
我相信您的问题的答案是,鸭子现在会将其飞行或嘎嘎叫行为委托给其中一个行为类中的一种方法。
因此,您现在拥有共享相同代码的几只鸭子。这肯定比让每只鸭子实现自己的代码要好,并且是主管所指的噩梦。
在学习本章时,您可能会发现委派是减少重复并更易于维护代码的秘密武器。