模板方法模式(Template Pattern)

模板方法模式:定义一个操作中的算法的骨架,差异性的实现交由子类完成。
模板方法模式(Template Pattern)

应用场景

  • 支付回调、银行业务
  • 数据库访问的封装
  • Junit单元测试
  • Hibernate中模板程序
  • spring中JDBCTemplate,HibernateTemplate等
  • httpservlet中的doget、dopost等
    模板方法模式(Template Pattern)

模板方法模式优缺点

优点:
不变的行为均交给了基类,减少了子类代码的重复

缺点:
每个不同的实现都需要子类,会导致子类个数的增加,设计更加抽象。

模板方法模式与策略模式的区别

策略模式的针对完全不同的骨架,主要解决多重if的问题
模板方法是具有相同的骨架,相同性由父类实现,差异性由子类实现

模板方法模式实现方式核心代码

/**
 * 异步回调业务
 * @return
 */
public String asyncCallBack() {
    // 1. 支付回调验证参数
    Map<String, String> verifySignatureMap = verifySignature();
    // 2. 参数验证成功,写入日志中..
    payLog(verifySignatureMap);
    String analysisCode = verifySignatureMap.get("analysisCode");
    if (!analysisCode.equals("200")) {
        return resultFail();
    }
    // 3. 执行回调异步相关逻辑
    return asyncService(verifySignatureMap);
}

/**
 * 支付回调验证参数
 *
 * @return
 */
protected abstract Map<String, String> verifySignature();

/**
 * 每个子类需要实现 实现业务解析操作
 *
 * @return
 */
protected abstract String asyncService(Map<String, String> verifySignatureMap);
@Override
protected Map<String, String> verifySignature() {
    //具体业务
}

@Override
protected String asyncService(Map<String, String> verifySignatureMap) {
    //具体业务
}
/**
*  真实调用
*/
@RequestMapping("/test")
public String test(String beanId){
    AbstractPayCallbackTemplate payCallbackTemplate = TemplateFactory.getPayCallbackTemplate(beanId);
    return payCallbackTemplate.asyncCallBack();
}

相关文章链接:
<<<23中常用设计模式总览
<<<代理模式(Proxy Pattern)
<<<装饰模式(Decorator Pattern)
<<<观察者模式(Observer Pattern)
<<<单例模式(Singleton Pattern)
<<<责任链模式(Chain of Responsibility Pattern)
<<<策略模式(Strategy Pattern)
<<<模板方法模式(Template Pattern)
<<<外观/门面模式(Facade Pattern)
<<<建造者模式(Builder Pattern)
<<<适配器模式(Adapter Pattern)
<<<原型模式(Prototype Pattern)
<<<工厂相关模式(Factory Pattern)