| 命令模式 | 登机入口 |
| 访问者模式 | 登机入口 |
| 软件设计7大原则和设计模式总结 | 登机入口 |
======================================================================
模板方法模式(Template Method Pattern)是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为行设计模式。
=====================================================================
举个简单的炒蔬菜的例子,我们把炒菜拆分为以下几个步骤:
-
放油
-
放入蔬菜
-
翻炒
-
放盐
-
放点其他佐料
-
出锅
接下来我们就以这个例子来写一个模板方法模式的示例
package com.zwx.design.pattern.templete;
public abstract class CookingVegetables {
protected final void cooking(){
//1.放油
this.putOil();
//2.放入蔬菜
this.putVegetables();
//3.翻炒
this.stirFry();
//4.放点盐
this.putSalt();
//5.放入佐料,如果没有就直接起锅了
if (this.needSeasoning()){
this.putSeasoning();
}
//6.起锅
this.dishUp();
}
//放油
final void putOil(){
System.out.println(“油下锅了。。。”);
}
//放入蔬菜
final void putVegetables(){
System.out.println(“菜下锅了。。。”);
}
//翻炒
final void stirFry(){
System.out.println(“正在翻炒。。。”);
}
//放点盐
final void putSalt(){
System.out.println(“放点盐。。。”);
}
//放入其他佐料
abstract void putSeasoning();
//是否需要佐料,这个是钩子方法,用于流程微调
protected boolean needSeasoning(){
return true;
}
//起锅
final void dishUp(){
System.out.println(“菜炒好了,可以起锅了”);
}
}
上面这个类中每个步骤都定义了一个方法,但是否是final类型,不允许被继承修改,只有一个步骤:【加入佐料】是抽象的,需要子类去自定义实现,还有一个特别的方法:needSeasoning(),这是一个钩子方法,那么什么是钩子方法呢?
钩子方法的主要目的是用来干预执行流程,使得我们控制行为流程更加灵活,更符合实际业 务的需求。钩子方法的返回值一般为适合条件分支语句的返回值(如 boolean、int 等),钩子方法不是必须的,可以根据实际业务场景确认是否需要
package com.zwx.design.pattern.templete;
public class CookingCabbage extends CookingVegetables {
@Override
void putSeasoning() {
System.out.println(“放点姜。。。”);
}
}
这个类主要就是实现抽象类中的抽象方法,去自定义实现某一个步骤
package com.zwx.design.pattern.temp
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
lete;
public class CookingTest {
public static void main(String[] args) {
CookingVegetables cookingVegetables = new CookingCabbage();
cookingVegetables.cooking();
}
}
模板方法模式相对来说是一个比较简单的设计模式,通过这样一个简单的案例,相信大家对模板方法模式会有一个基本的印象