模板方法模式又称模板模式,是值定义一个操作中算法的框架,而将一些步骤交给子类去实现。使得子类再不改变一个算法的结构就可以重新实现该算法的某些步骤。
通俗的说,模板方法模式就是封装一个固定的流程,流程有多个步骤,具体的步骤可以交给子类去实现。就是抽象和继承的应用
比如我们正常的找工作过程,投简历->跟boss谈->约面试->面试结束->面试成功->办理入职->上班工作。整个过程实际上是个固定的流程。面试是否成功这个环节实际上就可以是个钩子,如果成功,就办理入职,如果失败,就重新找工作。
public abstract class AbstractFindWord {
protected void resume() {
System.out.println("投简历");
}
protected void communicateWithBoss() {
System.out.println("Boss看到简历,跟Boss谈");
}
protected void appointmentInterview() {
System.out.println("聊得还可以,约面试");
}
protected void afterInterview() {
System.out.println("面试结束");
}
protected boolean isInterviewSuccess() {
return true;
}
protected void entry() {
System.out.println("办理入职");
}
protected void startWork() {
System.out.println("开始上班干活");
}
protected void findWork() {
resume();
communicateWithBoss();
appointmentInterview();
afterInterview();
if (isInterviewSuccess()) {
System.out.println("面试成功,准备办理入职");
} else {
System.out.println("面试失败,继续找工作吧");
return;
}
entry();
startWork();
}
}
public class XiaoMingFindWork extends AbstractFindWord {
public XiaoMingFindWork() {
System.out.println("我是小明,开始找工作");
}
@Override
protected boolean isInterviewSuccess() {
return false;
}
}
public class XiaoWangFindWork extends AbstractFindWord {
public XiaoWangFindWork() {
System.out.println("我是小王,开始找工作");
}
}
public class TestFindWork {
public static void main(String[] args) {
XiaoMingFindWork xiaoMing = new XiaoMingFindWork();
xiaoMing.findWork();
XiaoWangFindWork xiaoWang = new XiaoWangFindWork();
xiaoWang.findWork();
}
}
/*
我是小明,开始找工作
投简历
Boss看到简历,跟Boss谈
聊得还可以,约面试
面试结束
面试失败,继续找工作吧
我是小王,开始找工作
投简历
Boss看到简历,跟Boss谈
聊得还可以,约面试
面试结束
面试成功,准备办理入职
办理入职
开始上班干活
*/
具体实现个人去探索。
原文:https://www.cnblogs.com/ns-study/p/14613884.html