模板方法模式:定义一个操作中的算法的骨架,差异性的实现交由子类完成。
应用场景
- 支付回调、银行业务
- 数据库访问的封装
- Junit单元测试
- Hibernate中模板程序
- spring中JDBCTemplate,HibernateTemplate等
- httpservlet中的doget、dopost等
模板方法模式优缺点
优点:
不变的行为均交给了基类,减少了子类代码的重复
缺点:
每个不同的实现都需要子类,会导致子类个数的增加,设计更加抽象。
模板方法模式与策略模式的区别
策略模式的针对完全不同的骨架,主要解决多重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)