设计模式之《模板方法模式》

模板方法模式(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();
	}
}


猜你喜欢

转载自blog.csdn.net/cm777/article/details/80844794