Renbobo's Blog

Wo go where our vision is.

View project on GitHub

设计模式

22 Aug 2017

策略模式 鸭子应用 鸭子:共性(外形,游泳) 特性 (飞,叫) 不同的鸭子有不同的表现形式 红鸭:外形(红) 会飞 呱呱叫 绿鸭:外形(绿) 会飞 咕咕叫叫 橡皮鸭:外形(橡皮) 会飞 嘎嘎叫叫

主要问题:

  1. 因为有些鸭子不会飞,因此需要在子类中单独实现。
  2. 因为每种鸭子叫声可能会不同,因此需要在子类中单独实现 缺点:许多鸭子会飞,产生大量的重复代码。当飞行行为发生改变时,维护成本极高,需要将所有的子类都改一遍。叫也是同样。 改进1: 将飞行行为和叫行为单独提取出来,变成两个单独的抽象类。 继承并实现所有的飞行行为和叫行为。 每种鸭子根据自己的情况,初始化对应的飞和叫。 即使是这样,每个鸭子的行为不能被动态改变。如果橡皮鸭此时被安装上了飞行引擎,就可以实现飞的行为了。 改进2: 可以利用__设定方法__来设定鸭子的行为。而不是在鸭子的构造器内实例化。

策略模式类图: