模板方法
模板方法模式:
定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的重复代码全部在父类里面,不同业务的,抽取给子类进行实现。抽取过程---抽象方法。
父类里面是一整套业务流程模板,针对差异化的地方,可以用抽象方法封装,让不同的子类去实现
例子:
整套业务流程:基金定投业务
1,日志开启
2,发送到指定的基金公司接口,不同的子类实现(量子基金,对冲基金,浦发基金)
3,页面信息显示
4,日志结束
定义模板
public abstract class Funds { // 定投业务 void dingTou() { // 日志开启 logBegin(); // 2 发送到指定的基金公司接口,不同的子类实现(量子基金,对冲基金,浦发基金 invokeFundsInterface(); // 3 页面信息显示 show(); // 4 日志结束 logEnd(); } private void logEnd() { System.out.println("日志结束"); } private void show() { System.out.println("show successfully"); } public abstract void invokeFundsInterface(); //需要不同子类去实现的定义成抽象方法 private void logBegin() { System.out.println("日志开启"); } }
子类实现:
public class QuantumFunds extends Funds { @Override public void invokeFundsInterface() { System.out.println("量子基金定投业务接口。。。。"); } } class HedgeFunds extends Funds { @Override public void invokeFundsInterface() { System.out.println("对冲基金定投业务接口。。。。"); } } class PufaFunds extends Funds { @Override public void invokeFundsInterface() { System.out.println("浦发基金定投业务接口。。。。"); } }
Client:
public class Client { public static void main(String[] args) { QuantumFunds funds = new QuantumFunds(); funds.dingTou(); } }
在分析JDK 源码的时候,看到抽象类,可以看一下这个类里面有没有整体的业务逻辑,很可能是用了模板方法
HttpServlet 里就是用的模板方法
Aimer,c'est partager