打字猴:1.70045882e+09
1700458820 设计模式之禅 [:1700453953]
1700458821 设计模式之禅 10.4 模板方法模式的扩展
1700458822
1700458823 到目前为止,这两个模型都稳定地运行,突然有一天,老大急匆匆地找到了我:
1700458824
1700458825 “看你怎么设计的,车子一启动,喇叭就狂响,吵死人了!客户提出H1型号的悍马喇叭想让它响就响,H2型号的喇叭不要有声音,赶快修改一下。”
1700458826
1700458827 自己惹的祸,就要想办法解决它,稍稍思考一下,解决办法有了,先画出类图,如图10-4所示。
1700458828
1700458829
1700458830
1700458831
1700458832 图10-4 扩展悍马车模类图
1700458833
1700458834 类图改动似乎很小,在抽象类HummerModel中增加了一个实现方法isAlarm,确定各个型号的悍马是否需要声音,由各个实现类覆写该方法,同时其他的基本方法由于不需要对外提供访问,因此也设计为protected类型。其源代码如代码清单10-9所示。
1700458835
1700458836 代码清单10-9 扩展后的抽象模板类
1700458837
1700458838 public abstract class HummerModel{
1700458839
1700458840 /*
1700458841
1700458842 *首先,这个模型要能够被发动起来,别管是手摇发动,还是电力发动,反正
1700458843
1700458844 *是要能够发动起来,那这个实现要在实现类里了
1700458845
1700458846 */
1700458847
1700458848 protected abstract void start();
1700458849
1700458850 //能发动,那还要能停下来,那才是真本事
1700458851
1700458852 protected abstract void stop();
1700458853
1700458854 //喇叭会出声音,是滴滴叫,还是哔哔叫
1700458855
1700458856 protected abstract void alarm();
1700458857
1700458858 //引擎会轰隆隆的响,不响那是假的
1700458859
1700458860 protected abstract void engineBoom();
1700458861
1700458862 //那模型应该会跑吧,别管是人推的,还是电力驱动,总之要会跑
1700458863
1700458864 final public void run(){
1700458865
1700458866 //先发动汽车
1700458867
1700458868 this.start();
1700458869
[ 上一页 ]  [ :1.70045882e+09 ]  [ 下一页 ]