场景

做一套模拟鸭子的游戏。游戏中会出现各种鸭子,一边游泳一边咕咕叫。此系统内部设计应用了标准的的OO技术,设计了一个鸭子的超类,并让鸭子继承此超类。

第一章:设计模式:策略模式(一)

需求增加了需要会飞的鸭子来将竞争者抛在后头。这时候的设计是

第一章:设计模式:策略模式(一)

但是,可怕的事情发生了。。。

并非所有的鸭子都会飞,某些鸭子并不适合该行为,比如添加了一个橡皮鸭的种类就无法飞行。

对代码所做的局部修改,影响层面可不仅仅是局部。

此时一般程序员的想法是在橡皮鸭子类中重写父类的fly()方法,就好像覆盖quack()做法一样,可是再加上一个鸭子的种类既不会飞又不会叫。

这样出现的缺点是:

1.代码在多个子类中重复。

2.运行时的行为不容易改变。

3.很难知道所有鸭子的全部行为。

4.改变会牵一发动全身,造成其他鸭子不想要的改变。

显然这样的设计是不利于扩展的设计。那么该如何设计?请看下一节

相关文章: