设计模式-模板方法模式(Template Pattern)

上一篇 <<<策略模式(Strategy Pattern)
下一篇 >>>外观/门面模式(Facade Pattern)


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

应用场景

  • 支付回调、银行业务
  • 联合登录、对接三方短信接口、分布式锁
  • 数据库访问的封装
  • Junit单元测试
  • Hibernate中模板程序
  • spring中JDBCTemplate,HibernateTemplate等
  • httpservlet中的doget、dopost等


模板方法模式优缺点

优点:
模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。子类实现算法的某些细节,有助于算法的扩展。通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

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

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

相同点:它们的细节均由子类实现
不同点:
a.策略是相同的操作,定义为接口;模板方法是相同的骨架,定义为抽象类。
b.策略主要解决多重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)
<<<外观/门面模式(Facade Pattern)
<<<建造者模式(Builder Pattern)
<<<适配器模式(Adapter Pattern)
<<<原型模式(Prototype Pattern)
<<<工厂相关模式(Factory Pattern)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容