怎么使用web设计模式中的模板方法
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"怎么使用web设计模式中的模板方法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么
千家信息网最后更新 2026年11月02日怎么使用web设计模式中的模板方法
本篇内容介绍了"怎么使用web设计模式中的模板方法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
什么是模版方法模式
模板方法模式
1.定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。2.模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术,没有关联关系。 因此,在模板方法模式的类结构图中,只有继承关系。
核心设计要点
AbstractClass : 抽象类,定义并实现一个模板方法。这个模板方法定义了算法的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类去实现ConcreteClass : 实现实现父类所定义的一个或多个抽象方法。
模版方法应用场景
比如聚合支付平台中系统回调代码重构
Servlet请求
模板方法的代码实现
模板方法抽象类
@Slf4j@Componentpublic abstract class AbstractPayCallbackTemplate { /** * 异步回调业务 * * @return */ public String asyncCallBack() { // 1. 支付回调验证参数 Map verifySignatureMap = verifySignature(); // 2. 参数验证成功,写入日志中.. payLog(verifySignatureMap); String analysisCode = verifySignatureMap.get("analysisCode"); if (!analysisCode.equals("200")) { return resultFail(); } // 3. 执行回调异步相关逻辑 return asyncService(verifySignatureMap); } /** * 支付回调验证参数 * * @return */ protected abstract Map verifySignature(); /** * 使用多线程异步写入日志 * * @param verifySignatureMap */ @Async private void payLog(Map verifySignatureMap) { log.info(">>>>>>>>>>第二步 写入payLog........"); } /** * 每个子类需要实现 实现业务解析操作 * * @return */ protected abstract String asyncService(Map verifySignatureMap); /** * 异步返回结果.. * * @return */ protected abstract String resultSuccess(); /** * 异步返回失败 * * @return */ protected abstract String resultFail();} 具体实现模板
AliPayCallbackTemplate
@Slf4j@Componentpublic class AliPayCallbackTemplate extends AbstractPayCallbackTemplate { @Override protected Map verifySignature() { //>>>>假设一下为支付宝回调报文>>>>>>>>>>>>>>>> log.info(">>>>>第一步 解析支付宝据报文.....verifySignature()"); Map verifySignature = new HashMap<>(); verifySignature.put("price", "1399"); verifySignature.put("orderDes", "充值蚂蚁课堂永久会员"); // 支付状态为1表示为成功.... verifySignature.put("aliPayMentStatus", "1"); verifySignature.put("aliPayOrderNumber", "201910101011"); // 解析报文是否成功 200 为成功.. verifySignature.put("analysisCode", "200"); return verifySignature; } @Override protected String asyncService(Map verifySignatureMap) { log.info(">>>>>第三步asyncService()verifySignatureMap:{}", verifySignatureMap); String paymentStatus = verifySignatureMap.get("aliPayMentStatus"); if (paymentStatus.equals("1")) { String aliPayOrderNumber = verifySignatureMap.get("aliPayOrderNumber"); log.info(">>>>orderNumber:{aliPayOrderNumber},已经支付成功 修改订单状态为已经支付..."); } return resultSuccess(); } @Override protected String resultSuccess() { return "ok"; } @Override protected String resultFail() { return null; } UnionPayCallbackTemplate
@Slf4j@Componentpublic class UnionPayCallbackTemplate extends AbstractPayCallbackTemplate { @Override protected Map verifySignature() { //>>>>假设一下为银联回调报文>>>>>>>>>>>>>>>> log.info(">>>>>第一步 解析银联数据报文.....verifySignature()"); Map verifySignature = new HashMap<>(); verifySignature.put("price", "1399"); verifySignature.put("orderDes", "充值蚂蚁课堂永久会员"); // 支付状态为1表示为成功.... verifySignature.put("paymentStatus", "1"); verifySignature.put("orderNumber", "201910101011"); // 解析报文是否成功 200 为成功.. verifySignature.put("analysisCode", "200"); return verifySignature; } @Override protected String asyncService(Map verifySignatureMap) { log.info(">>>>>第三步asyncService()verifySignatureMap:{}", verifySignatureMap); String paymentStatus = verifySignatureMap.get("paymentStatus"); if (paymentStatus.equals("1")) { String orderNumber = verifySignatureMap.get("orderNumber"); log.info(">>>>orderNumber:{orderNumber},已经支付成功 修改订单状态为已经支付..."); } return resultSuccess(); } @Override protected String resultSuccess() { return "success"; } @Override protected String resultFail() { return null; }} 工厂模式获取模板
@Componentpublic class TemplateFactory { public static AbstractPayCallbackTemplate getPayCallbackTemplate(String templateId) { AbstractPayCallbackTemplate payCallbackTemplate = (AbstractPayCallbackTemplate) SpringUtils.getBean(templateId); return payCallbackTemplate; }}controller
@RestControllerpublic class TemplateController { @RequestMapping("/asyncCallBack") public String asyncCallBack(String templateId) { AbstractPayCallbackTemplate payCallbackTemplate = TemplateFactory.getPayCallbackTemplate(templateId); return payCallbackTemplate.asyncCallBack(); }}控制台输出结果
>>>>>第一步 解析支付宝据报文.....verifySignature()>>>>>>>>>>第二步 写入payLog........>>>>>第三步asyncService()verifySignatureMap:{aliPayOrderNumber=201910101011, orderDes=充值蚂蚁课堂永久会员, price=1399, analysisCode=200, aliPayMentStatus=1}>>>>orderNumber:{aliPayOrderNumber},已经支付成功 修改订单状态为已经支付...1.)优点模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。子类实现算法的某些细节,有助于算法的扩展。通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合"开放-封闭原则"。2.)缺点每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。3.)适用场景在某些类的算法中,用了相同的方法,造成代码的重复。控制子类扩展,子类必须遵守算法规则。
"怎么使用web设计模式中的模板方法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
方法
支付
模板
模式
子类
成功
算法
报文
代码
状态
设计
会员
参数
步骤
蚂蚁
订单
课堂
永久
验证
设计模式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网属科技
互联网巨头科技公司
互联网科技与金融科技
深圳互联网络科技有限公司
贷财互联网科技
重庆科技学院互联网
互联网科技大会案例
中正互联网科技招聘
上海电发互联网科技有限公司
昭通云南众福互联网科技有限公司
互联网5g黑科技有哪些
允成互联网科技有限公司融资
迪庆互联网科技招生
中国互联网公司排名锤子科技
烟台灵鸽互联网科技有限公司
怎样加入科技互联网
抖集互联网科技技术咨询
互联网科技博主张洲
承德科技产业互联网平台
利用互联网等科技手段
互联网科技工作委员会主任
中国互联网科技股
银优互联网科技有限公司
左右互联网络科技
互联网企业和科技型企业
开一家科技互联网公司需要多少钱
梅州GM互联网络科技有限公司
皮皮虾互联网科技有限公司
上海互联网科技园景观
银川新华互联网科技学校招聘