先来大致描叙一下最初项目的要求:
有一款鸭子应用游戏,她的内容大概是:游戏中有许多鸭子,每个鸭子都会叫和游泳,不同的是鸭子之间的外观不一样。
最初项目设计:
鸭子超类(Duck),有叫方法(呱呱叫),游泳方法,外观方法(虚函数);
鸭子子类,继承父类并实现各自的外观。
项目新要求:
需考虑以后增加鸭子的种类:橡皮鸭(吱吱叫,不会飞)、诱饵鸭(不会飞,不会叫)......
需考虑以后会增加鸭子飞行方式;
增加鸭子飞方法(并不是所有的鸭子都会飞,部分鸭子不会叫)
项目设计:
现在,为了要分开“变化和不会变化的部分”,我们准备建立两组类(完全远离鸭子超类),一个是飞相关的,一个是叫相关的,每一组将实现各自的动作。比方说,我们可能有一个类实现“呱呱叫”,另一个类实现“吱吱叫”,还有一个类实现安静。以上体现第一个设计原则:分开改变和不变的类;
另外,Duck类中修改飞和叫两个方法,将fly()和quack()修改为performFly(),performQuack(),增加两个变量飞(FlyBehavior flybehavior)、叫(QuackBehavior quackbehavior);