原文地址:https://www.cnblogs.com/gxyandwmm/p/9375843.html
在以下代码例子中是模版模式的设计案例。
模版模式:主要是通过生成一个抽象类,并且实现抽象类子类的一些相同实现的方法 下述例子中的run 方法。这样子类就可以不用实现此方法,就可以调用的一种方式。
钩子方法,是在此基础上做了一些改动,主要是通过实现的另一个方法来对父类方法的执行程序实现修改的方法。在下述例子中,是通过isAlarm方法来修改run方法的执行逻辑。
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() { //我们加了一个判断方法,默认返回true
return true;
}
}
public class HummerH1 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
protected boolean isAlarm() { //覆写isAlarm方法,返回判断标记
return this.alarmFlag;
}
public void setAlarm(boolean isAlarm) { //设置判断标记
this.alarmFlag = isAlarm;
}
}