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 ]
[
下一页 ]