设计模式---模板模式

什么是模板模式一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式

有顺序的做某件事情的步骤,可以通过模板规定这个事情的流程,按照步骤执行。

可能只有其中某一项不一样。通过子能重写方法实现,达到复用的目的、开闭原则。

钩子函数是否需要执行此步骤,有的事情不要执行,则可以通过钩子方法实现

钩子顾名思义就是用来挂东西的。那么要挂东西必须有个被挂的东西,要不就是铁环、要不就是墙的边沿。所以要能挂住东西必须要有个被勾住的铁环,要一个钩子。那么在java中也是同样的原理,你首先需要一个被挂在的东西,一个挂载的东西。

 

 

  • 实现


/**
 * 抽象模板方法
  */
public abstract class AbstractTemplate {
	/**
	 * 是否吃早饭<br>
	 * 钩子方法实现<br>
	 * 有的人不吃
	 * 
	 * @return 默认吃
	 */
	protected boolean isBreakfast() {
		return true;
	}

	/**
	 * 开始一天生活
	 */
	public void execute() {
		// 起床
		getUp();
		// 吃早饭
		if (isBreakfast()) {
			breakfast();
		}
		// 工作
		work();
		// 下班
		offWork();
		// 吃晚饭
		supper();
		// 休息
		rest();
	}

	protected void getUp() {
		System.out.println("开始起床了。。。");
	}

	protected void breakfast() {
		System.out.println("吃早饭了。。。");
	}

	protected abstract void work();

	protected abstract void offWork();

	protected void supper() {
		System.out.println("吃晚饭了。。。");
	}

	protected void rest() {
		System.out.println("我要休息了。。。");
	}
}




/**
 * 小李一天的生活
  */
public class XiaoLi extends AbstractTemplate{

	@Override
	protected boolean isBreakfast() {
		return false;
	}

	@Override
	protected void work() {
		System.out.println("开始上课了。。。。。");
	}

	@Override
	protected void offWork() {
		System.out.println("今天被老师训了,,,不让下课回家。。");
	}

}

/**
 * 小米一天的生活
 * 
  */
public class XiaoMi extends AbstractTemplate {

	@Override
	protected void work() {
		System.out.println("开始写代码了。。。");
		
	}

	@Override
	protected void offWork() {
		System.out.println("6点了,下班了。88");
		
	}

}


public class Test {
	public static void main(String[] args) {
		// 小米的一天生活
		AbstractTemplate xiaomi = new XiaoMi();
		// 开始
		xiaomi.execute();
		// 小李的一天生活
		AbstractTemplate xiaoli = new XiaoLi();
		// 开始
		xiaoli.execute();
	}
}

总结(使用场景)

  1. 框架执行流程操作
  2. 事件处理步骤
  3. 有多个子类共有的方法,且逻辑相同。
  4. 重要的、复杂的方法,可以考虑作为模板方法。

猜你喜欢

转载自blog.csdn.net/oufua/article/details/82220112