模板抽象类 HummerModel
public abstract class HummerModel {
public abstract void start();
public abstract void stop();
public abstract void alarm();
public abstract void engineBoom();
public void run(){
this.start();
this.engineBoom();
if (this.isAlarm()){
this.alarm();
}
this.stop();
}
// 拓展钩子函数,根据状态执行alarm()
public boolean isAlarm(){
return true;
}
}
模板实现类 HummerH1Model
public class HummerH1Model extends HummerModel {
private boolean alarmFlag = true;
@Override
public void start() {
System.out.println("悍马H1启动。。。");
}
@Override
public void stop() {
System.out.println("悍马H1停下。。。");
}
@Override
public void alarm() {
System.out.println("悍马H1鸣笛。。。");
}
@Override
public void engineBoom() {
System.out.println("悍马H1引擎启动。。。");
}
@Override
public boolean isAlarm() {
return this.alarmFlag;
}
public void setAlarmFlag(boolean alarmFlag){
this.alarmFlag = alarmFlag;
}
}
模板实现类 HummerH2Model
public class HummerH2Model extends HummerModel {
private boolean alarmFlag = true;
@Override
public void start() {
System.out.println("悍马H2启动。。。");
}
@Override
public void stop() {
System.out.println("悍马H2停下。。。");
}
@Override
public void alarm() {
System.out.println("悍马H2鸣笛。。。");
}
@Override
public void engineBoom() {
System.out.println("悍马H2引擎启动。。。");
}
@Override
public boolean isAlarm() {
return this.alarmFlag;
}
public void setAlarmFlag(boolean alarmFlag){
this.alarmFlag = alarmFlag;
}
}
启动类
public class TemplateMethodMain {
public static void main(String[] args) {
try {
System.out.println("-----H1型悍马-----");
System.out.println("H1型悍马是否需要喇叭声响? 0-不需要 1-需要");
String type = (new BufferedReader(new InputStreamReader(System.in))).readLine();
HummerH1Model h1 = new HummerH1Model();
if (type.equals("0")) h1.setAlarmFlag(false);
h1.run();
System.out.println("\n-----H1型悍马-----");
HummerH2Model h2 = new HummerH2Model();
h2.run();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果
参考书籍
秦小波《设计模式之禅》