我看懂的设计模式 Template Method,模板方法

来源:互联网 发布:insar数据 编辑:程序博客网 时间:2024/04/30 16:34

Template Method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。




package com.cbf4life;
/**
* Hummer Model是悍马车辆模型的意思
*/
public abstract class HummerModel {

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;
}
}



package com.cbf4life;

public class HummerH2Model extends HummerModel {
@Override
protected void alarm() {
System.out.println("悍马H2鸣笛...");
}
@Override
protected void engineBoom() {
System.out.println("悍马H2引擎声音是这样在...");
}
@Override
protected void start() {
System.out.println("悍马H2发动...");
}
@Override
protected void stop() {
System.out.println("悍马H2停车...");
}
//默认没有喇叭的
@Override
protected boolean isAlarm() {
return false;
}
}

package com.cbf4life;
public class Client {
public static void main(String[] args) {
HummerH2Model h2 = new HummerH2Model();
h2.run();
}
}



package com.cbf4life;
public class HummerH1Model extends HummerModel {
private boolean alarmFlag = true; //是否要响喇叭
@Override
protected void alarm() {
System.out.println("悍马H1鸣笛...");
}
@Override
protected void engineBoom() {
System.out.println("悍马H1引擎声音是这样在...");
}
@Override
protected void start() {
System.out.println("悍马H1发动...");
}
@Override
protected void stop() {
System.out.println("悍马H1停车...");
}
@Override
protected boolean isAlarm() {
return this.alarmFlag;
}
//要不要响喇叭,是有客户的来决定的
public void setAlarm(boolean isAlarm){
this.alarmFlag = isAlarm;
}
}

package com.cbf4life;
public class Client {
public static void main(String[] args) {
HummerH1Model h1 = new HummerH1Model();
h1.setAlarm(true);
h1.run();
}
}


原创粉丝点击