1. 模板模式介绍
1、模板模式即模板方法模式自定义了一个操作中的算法骨架,而将步骤延迟到子类中,使得子类可以不改变一个算法的结构,可以自定义该算法的某些特定步骤;
2、父类中提取了公共的部分代码,便于代码复用;
3、部分抽象方法是由子类实现的,子类可以通过方法实现增加相应的功能;
4、为了防止公共骨架方法重写操作,一般公共流程方法上都加有 final 关键字;
5、自定义钩子方法控制公共流程方法某些步骤是否需要执行。
2.模板模式结构类
① 抽象方法:模板抽象类中自定义,由实现类具体实现。
② 具体方法:模板抽象类中非抽象方法(公共流程方法),实现类中可以继承或重写它。
③ 钩子方法:模板抽象类已经实现,用于判断的逻辑方法。实现类决定是否重写此方法,该方法为钩子方法
3.模板模式代码案例
一、模板抽象类
public abstract class IRobotTemplate<T> {// 骨架算法(流程)public final void processExecute(T param) {this.executeGo(param);// 钩子方法决定是否执行(默认不执行)if (this.isOpen()) {this.executeRun(param);}}// 步骤1-待实现public abstract void executeRun(T param);// 步骤2-待实现public abstract void executeGo(T param);// 钩子方法public boolean isOpen() {return false;}
}
二、模板实现类
@Component
public class RobotTemplate extends IRobotTemplate<UserInfo> {@Overridepublic void executeRun(UserInfo userInfo) {System.out.println(userInfo.getUsername() + "会跑步");}@Overridepublic void executeGo(UserInfo userInfo) {System.out.println(userInfo.getUsername() + "会走路");}@Overridepublic boolean isOpen() {return true; // 重写钩子方法;使执行executeRun方法}
}
三、运行模板模式
@Resource
private IRobotTemplate robotTemplate;@Override
public void process(UserInfo userInfo) {userInfo = new UserInfo();userInfo.setUsername("机器人小智");// 执行模板抽象类中的公共流程方法robotTemplate.processExecute(userInfo);
}
四、执行结果