<分区>
我正在阅读 java 中的策略设计模式。问题设置如下
你有一个鸭子类和几种鸭子。您必须对鸭子的飞行和嘎嘎行为进行编码。你显然不能在每个鸭子类方法中编写飞行和非飞行行为的代码,尤其是当你有 100 种不同的鸭子时。因此,您创建了一个名为 FlyingBehavior
和 QuackingBehavior
的行为接口(interface),并具有类似 NonFlyingBehavior
或 FlyWithWingsBehavior
或 MuteQuackBehavior 的实现
或 SqueakQuackBehavior
。然后将这些设置在不同类别的鸭子的字段中。这样你就可以将这些行为与鸭子联系起来。
我不明白的是为什么它必须用组合来完成,为什么不能用继承来完成。为什么不能创建子类 lke NonFlyingDuck
, FlyWithWingsDuck
或者 SqueakingDuck
, MuteQuackingDuck
等等,然后实现fly()
或 quack()
方法,然后将适当的行为分配给鸭子。是不是因为不支持多重继承。所以如果你有一只不会飞的吱吱叫的鸭子,那么你不能同时扩展 squeakingDuck
和 NonFlyingDuck
或者它是别的东西。有什么方法可以通过继承来做到这一点吗?
感觉有点乱。座右铭是“重组合胜过继承”。为什么呢?
谁能详细解释一下?