模板方法模式(Template Method Pattern)定义如下:
Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template
Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's
structure.(定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改
变一个算法的结构即可重定义该算法的某些特定步骤。)
类图:
package syasuo.mobanfangfa;
/**
* 抽象模板类
* @author Administrator
*
*/
public abstract class AbstractHummerModel {
//启动
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 false;
}
}
package syasuo.mobanfangfa;
/**
* 悍马H2车型
* @author Administrator
*
*/
public class HummerH2Model extends AbstractHummerModel{
@Override
protected void start() {
System.out.println("悍马H2启动了");
}
@Override
protected void stop() {
System.out.println("悍马H2停止了");
}
@Override
protected void alarm() {
System.out.println("悍马H2鸣喇叭滴滴滴滴");
}
@Override
protected void engineBoom() {
System.out.println("悍马H2引擎声隆隆隆隆");
}
/**
* 默认喇叭一直想
*/
protected boolean isAlarm(){
return true;
}
}
package syasuo.mobanfangfa;
/**
* 悍马H1车型
* @author Administrator
*
*/
public class HummerH1Model extends AbstractHummerModel{
private boolean alarmFlag = false; //要喇叭响
@Override
protected void start() {
System.out.println("悍马H1启动了");
}
@Override
protected void stop() {
System.out.println("悍马H1停止了");
}
@Override
protected void alarm() {
System.out.println("悍马H1鸣喇叭哔哔哔哔");
}
@Override
protected void engineBoom() {
System.out.println("悍马H1引擎轰轰轰轰");
}
@Override
protected boolean isAlarm() {
return this.alarmFlag;
}
/**
* 要不要响喇叭 由驾驶人决定
* @param alarmFlag
*/
public void setAlarmFlag(boolean alarmFlag) {
this.alarmFlag = alarmFlag;
}
}
package syasuo.mobanfangfa;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
HummerH1Model h1Model = new HummerH1Model();
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
String str = scanner.next();
if(str.equals("1"))
h1Model.setAlarmFlag(true);
h1Model.run();
System.out.println("-------------------------------------");
HummerH2Model h2Model = new HummerH2Model();
h2Model.run();
scanner.close();
}
}