模板设计模式:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
一、模式类图:抽象方法中编写一个设定模板方法,在子类中去实现具体的模板方法中的操作步骤。
二、热身代码:
package com.hongyan.TemplateMethod; public class Main { public static void main(String[] args) { AbstractTemplate f = new ConTemplate(); f.templateMethod(); } } /** * 抽象模板方法 * * @author hy * @date 2022/01/23 */ abstract class AbstractTemplate { public void templateMethod() { op1(); op2(); } abstract void op1(); abstract void op2(); } /** * 具体的模板方法,重写模板方法的业务逻辑方法 * * @author hy * @date 2022/01/23 */ class ConTemplate extends AbstractTemplate { @Override void op1() { System.out.println("op1"); } @Override void op2() { System.out.println("op2"); } }
三、框架中的应用:
通过以上两个模板框架可以清晰地看出,都定义了如下接口或类:
1. InitializingBean 接口,而这个接口其实只有一个方法 void afterPropertiesSet() throws Exception; 即该方法允许bean实例在设置完所有bean属性后对其总体配置和最终初始化执行验证;
2. XXXAccessor 抽象类中封装了具体的一些必要配置信息,例如连接池的初始化等;
3. XXXOperations 封装了一些操作方法,具体实现都是在 XXXTemplate 方法中完成;
4. Aware(可选) 实现了Aware系列接口的bean可以访问Spring容器。增强了模板方法的功能,可以获取容器的一些配置信息。具体根据需要去配置即可;
5. XXXTemplate 封装了具体业务逻辑的的实现方法。
总结:其实以上的两个框架都是很相似的,如果你阅读过其他模板框架其实都是类似的,因此根据这种套路,你也可以完成一个模板框架的编写了!在具体工作中,我常用的套路是封装一些 xxxUtils,工具类中有一个 execute() 方法封装了一些固定的算法,调用方可以根据自己的需要完成具体的业务逻辑。