1.建立一个抽象模板类
public abstract class HummerModel {
protected abstract void start();
protected abstract void stop();
protected abstract void alarm();
protected abstract void engineBoom();
public void run(){
this.start();
this.engineBoom();
if (this.isAlarm()){
this.alarm();
}
this.stop();
}
//这是一个钩子方法
protected boolean isAlarm(){
return true;
}
}
2.具体实现类
public class HummerH1Model extends HummerModel {
private boolean isAlarm = true;
@Override
protected void start() {
System.out.println("悍马1启动");
}
@Override
protected void stop() {
System.out.println("悍马1暂停");
}
@Override
protected void alarm() {
System.out.println("悍马1鸣笛");
}
@Override
protected void engineBoom() {
System.out.println("悍马1发动机声音");
}
@Override
protected boolean isAlarm() {
return this.isAlarm;
}
public void setAlarm(boolean alarm) {
this.isAlarm = alarm;
}
}
3.场景类
public class Client {
public static void main(String[] args) throws IOException {
HummerH1Model hummer1Model = new HummerH1Model();
System.out.println("--------悍马1--------");
System.out.println("悍马1是否需要喇叭声响?0-不需要 1-需要");
String type = (new BufferedReader(new InputStreamReader(System.in))).readLine();
if (type.equals("0")){
hummer1Model.setAlarm(false);
}else if (type.equals("1")){
hummer1Model.setAlarm(true);
}
hummer1Model.run();
HummerH2Model hummer2Model = new HummerH2Model();
hummer2Model.run();
}
}
4.模板方法的应用场景
①多个子类用共有的方法并且逻辑基本相同时
②重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类去实现
③重构时模板方法模式是一个经常使用的模式,把相同打代码抽取到父类中,然后通过钩子函数(钩子函数见1)约束其行为