公司做了一套相当成功的模拟鸭子游戏:SimUDuck。游戏中会出现各种鸭子,一边游泳戏水,一边呱呱叫。此系统的内部设计使用了标准的OO技术,设计了一个鸭子超类(Superclass),并让各种鸭子继承此超类。
去年,公司的竞争压力加剧。主管们确定,此模拟程序需要会飞的鸭子来将竞争者抛在后头。
如何去实现????
分析:此程序需要会飞的鸭子,逐步考虑:
- 可以在Duck基类中加一个fly()方法,然后在子类MallardDuck、RedhradDuck中重写该方法。但是每增加一种颜色的鸭子,都需要重写fly()方法。这样子会比较麻烦。
- 使用接口,我们可以把fly()方法放到接口里,只有那些会飞的鸭子才需要实现这个接口。但是如果鸭子数量过多时,那么所有的鸭子都需要重复实现这个方法,而且如果我们想对fly()做一点修改,那么我们就需要修改很多很多次。
- 软件开发的一个不变真理是改变,不管软件设计的多好,一段时间之后,总是需要成长和改变,否则软件就会“死亡”。所以我们要设计易扩展的程序将经常要改变的代码抽离出来抽象成变量或者类来代替,不能写死。
- 分开变化和不会变化的部分,在这个问题中,除了fly()之外,Duck类一切还算正常,我们可以建立一组与fly相关的类,实现“可以飞”和“不可以飞”
- 至此,模拟鸭子的UML图如下&#x