模板方法模式【Template Method Pattern】

周三,9:00,我刚刚坐到位置,打开电脑准备开始干活。
“小三,小三,叫一下其它同事,到会议室,开会”老大跑过来吼,带着淫笑。还不等大家坐稳,老
大就开讲了,
“告诉大家一个好消息,昨天终于把牛叉模型公司的口子打开了,要我们做悍马模型,虽然是第一个
车辆模型,但是我们有能力,有信心做好,我们一定要…(中间省略20 分钟的讲话,如果你听过领导人的
讲话,这个你应该能够续上)”
动员工作做完了,那就开始压任务了,“这次时间是非常紧张的,只有一个星期的时间,小三,你负责
在一个星期的时间把这批10 万车模(注:车模是车辆模型的意思,不是香车美女那个车模)建设完成…”
“一个星期?这个…,是真做不完,要做分析,做模板,做测试,还要考虑扩展性、稳定性、健壮性
等,时间实在是太少了”还没等老大说完,我就急了,再不急我的小命就折在上面了!
“那这样,你只做实现,不考虑使用设计模式,扩展性等都不用考虑”老大又把我压回去了。
“不考虑设计模式?那…”
哎,领导已经布置任务了,那就开始死命的做吧,命苦不能怨政府,点背不能怪社会呀,然后就开始
准备动手做,在做之前先介绍一下我们公司的背景,我们公司是做模型生产的,做过桥梁模型、建筑模型、
机械模型,甚至是一些政府、军事的机密模型,这个不能说,就是把真实的实物按照一定的比例缩小或放
大,用于试验、分析、量化或者是销售等等,上面提到的牛叉模型公司专门销售车辆模型的公司,自己不
生产,我们公司是第一次从牛叉模型公司接单,那我怎么着也要把活干好,可时间很紧张呀,怎么办?
既然领导都说了,不考虑扩展性,那好办,我先设计个类图:

public abstract class HummerModel {
	/*
	* 首先,这个模型要能够被发动起来,别管是手摇发动,还是电力发动,反正
	* 是要能够发动起来,那这个实现要在实现类里了
	*/
	public String name;
	public HummerModel(String name) {
		this.name=name;
	}
	/*
	* 首先,这个模型要能够被发动起来,别管是手摇发动,还是电力发动,反正
	* 是要能够发动起来,那这个实现要在实现类里了
	*/
	protected abstract void start();
	//能发动,那还要能停下来,那才是真本事
	protected abstract void stop();
	//喇叭会出声音,是滴滴叫,还是哔哔叫
	protected abstract void alarm();
	//引擎会轰隆隆的响,不响那是假的
	protected abstract void engineBoom();
	//那模型应该会跑吧,别管是人推的,还是电力驱动,总之要会跑
	final public void run() {
		//先发动汽车
		this.start();
		//引擎开始轰鸣
		this.engineBoom();
		//喇嘛想让它响就响,不想让它响就不响
		if(this.isAlarm()){
			this.alarm();
		}
		//到达目的地就停车
		this.stop();
	}
	//钩子方法,默认喇叭是会响的
	protected boolean isAlarm(){
		return true;
	}
}


 

public class Smark extends HummerModel {

	private String name;
	public static boolean falg=true;
	public Smark(String name) {
		super(name);
		this.name=name;
	}

	@Override
	protected void start() {
		System.out.println(name+"开启了");
	}

	@Override
	protected void stop() {
		System.out.println(name+"停止了");
	}

	@Override
	protected void alarm() {
		System.out.println(name+"喇叭挡挡的");
	}

	@Override
	protected void engineBoom() {
		System.out.println(name+"发送机嘀嘀的");
	}

	
	@Override
	protected boolean isAlarm() {
		// TODO Auto-generated method stub
		return falg;
	}
	
	private void setAlarm(boolean b) {
		// TODO Auto-generated method stub
		falg=b;
	}

	public static void main(String[] args) {
		Smark smark=new Smark("大奔");
		smark.setAlarm(false);
		smark.run();
	}

}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值