周三,9:00,我刚刚坐到位置,打开电脑准备开始干活。
“小三,小三,叫一下其它同事,到会议室,开会”老大跑过来吼,带着淫笑。还不等大家坐稳,老
大就开讲了,
“告诉大家一个好消息,昨天终于把牛叉模型公司的口子打开了,要我们做悍马模型,虽然是第一个
车辆模型,但是我们有能力,有信心做好,我们一定要…(中间省略 20 分钟的讲话,如果你听过领导人的
讲话,这个你应该能够续上) ”
动员工作做完了,那就开始压任务了, “这次时间是非常紧张的,只有一个星期的时间,小三,你负责
在一个星期的时间把这批 10 万车模(注:车模是车辆模型的意思,不是香车美女那个车模)建设完成…”
“一个星期?这个…,是真做不完,要做分析,做模板,做测试,还要考虑扩展性、稳定性、健壮性
等,时间实在是太少了”还没等老大说完,我就急了,再不急我的小命就折在上面了!
“那这样,你只做实现,不考虑使用设计模式,扩展性等都不用考虑”老大又把我压回去了。
“不考虑设计模式?那…”
哎,领导已经布置任务了,那就开始死命的做吧,命苦不能怨政府,点背不能怪社会呀,然后就开始
准备动手做,在做之前先介绍一下我们公司的背景,我们公司是做模型生产的,做过桥梁模型、建筑模型、
机械模型,甚至是一些政府、军事的机密模型,这个不能说,就是把真实的实物按照一定的比例缩小或放
大,用于试验、分析、量化或者是销售等等,上面提到的牛叉模型公司专门销售车辆模型的公司,自己不
生产,我们公司是第一次从牛叉模型公司接单,那我怎么着也要把活干好,可时间很紧张呀,怎么办?
既然领导都说了,不考虑扩展性,那好办,我先设计个类图:
非常简单的实现,你要悍马模型,我就给你悍马模型,先写个抽象类,然后两个不同型号的模型实现
类,那我们把这个程序实现出来:
HummerModel 抽象类的程序清单如下:
package com.alex.patterns.templateMethod;
/**
* @author Alex
* Model是悍马车辆模型的意思,不是悍马美女车模
*/
public abstract class HummerModel {
/*
* 首先,这个模型要能够被发动起来,别管是手摇发动,还是电力发动,反正 是要能够发动起来,那这个实现要在实现类里了
*/
public abstract void start();
// 能发动,那还要能停下来,那才是真本事
public abstract void stop();
// 喇叭会出声音,是滴滴叫,还是哔哔叫
public abstract void alarm();
// 引擎会轰隆隆的响,不响那是假的
public abstract void engineBoom();
// 那模型应该会跑吧,别管是人推的,还是电力驱动,总之要会跑
public abstract void run();
}
H1 型号悍马的定义如下:
package com.alex.patterns.templateMethod;
/**
* @author Alex
* 悍马车是每个越野者的最爱,其中H1最接近军用系列
*/
public class HummerH1Model extends HummerModel {
@Override
public void alarm() {
System.out.println("悍马H1鸣笛...");
}
@Override
public void engineBoom() {
System.out.println("悍马H1引擎声音是这样在...");
}
@Override
public void start() {
System.out.println("悍马H1发动...");
}
@Override
public void stop() {
System.out.println("悍马H1停车...");
}
/*
* 这个方法是很有意思的,它要跑,那肯定要启动,停止了等,也就是要调其他方法
*/
@Override
public void run() {
// 先发动汽车
this.start();
// 引擎开始轰鸣
this.engineBoom();
// 然后就开始跑了,跑的过程中遇到一条狗挡路,就按喇叭
this.alarm();
// 到达目的地就停车
this.stop();
}
}
然后看悍马 H2 型号的实现:
package com.alex.patterns.templateMethod;
/**
* @author Alex
* H1和H2有什么差别,还真不知道,真没接触过悍马
*/
public