-
设计模式---模板模式
-
介绍
什么是模板模式:一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
有顺序的做某件事情的步骤,可以通过模板规定这个事情的流程,按照步骤执行。
可能只有其中某一项不一样。通过子能重写方法实现,达到复用的目的、开闭原则。
钩子函数:是否需要执行此步骤,有的事情不要执行,则可以通过钩子方法实现
钩子顾名思义就是用来挂东西的。那么要挂东西必须有个被挂的东西,要不就是铁环、要不就是墙的边沿。所以要能挂住东西必须要有个被勾住的铁环,要一个钩子。那么在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();
}
}
总结(使用场景)
- 框架执行流程操作
- 事件处理步骤
- 有多个子类共有的方法,且逻辑相同。
- 重要的、复杂的方法,可以考虑作为模板方法。