当前位置: 首页 > news >正文 网站建设首选智投未来1长春网站建设优势吉网传媒好 news 2025/10/29 3:02:55 网站建设首选智投未来1,长春网站建设优势吉网传媒好,wordpress文章类模板,企业文化经典句子设计模式-服务定位器模式一、背景1.1 服务定位模式1.2 策略模式二、代码实战2.1 服务定位器2.2 配置ServiceLocatorFactoryBean2.3 定义一个支付的接口2.4 根据不同类型处理Bean2.5 controller层三、项目结构及测试结果3.1 测试结果3.2 项目结构及源码(欢迎star)四、参考资料一… 设计模式-服务定位器模式一、背景1.1 服务定位模式1.2 策略模式二、代码实战2.1 服务定位器2.2 配置ServiceLocatorFactoryBean2.3 定义一个支付的接口2.4 根据不同类型处理Bean2.5 controller层三、项目结构及测试结果3.1 测试结果3.2 项目结构及源码(欢迎star)四、参考资料一、背景 项目开发中如果让你设计支付模块目前有支付宝、微信、各大银行的部分你会如何设计支付这块的代码在调用的客户端一般都是用if else去做判断比如类型等于ALIPAY我就用支付宝的实现逻辑处理。那如果新加一种支付方式是不是调用的客户端还要修改呢这显然太耦合了更高级一点可以用策略模式去实现。这篇博文使用“策略模式的升级版本”服务定位模式Service Locator Pattern来解决它帮助我们消除紧耦合实现及其依赖性并提出将服务与其具体类解耦。 1.1 服务定位模式 服务定位器模式Service Locator Pattern属于J2EE 模式。用在我们想使用 JNDI 查询定位各种服务的时候考虑到为某个服务查找 JNDI 的代价很高服务定位器模式充分利用了缓存技术。在首次请求某个服务时服务定位器在 JNDI 中查找服务并缓存该服务对象。当再次请求相同的服务时服务定位器会在它的缓存中查找这样可以在很大程度上提高应用程序的性能。以下是这种设计模式的实体。 (1)服务Service - 实际处理请求的服务。对这种服务的引用可以在 JNDI 服务器中查找到。 (2)Context / 初始的Context - JNDI Context 带有对要查找的服务的引用。 (3)服务定位器Service Locator - 服务定位器是通过JNDI 查找和缓存服务来获取服务的单点接触。 (4)缓存Cache - 缓存存储服务的引用以便复用它们。 (5)客户端Client) -Client 是通过 ServiceLocator 调用服务的对象。 1.2 策略模式 在策略模式Strategy Pattern中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 主要解决 在有多种算法相似的情况下使用 if…else 所带来的复杂和难以维护。 何时使用 一个系统有许多许多类而区分它们的只是他们直接的行为。 应用实例 诸葛亮的锦囊妙计每一个锦囊就是一个策略。 旅行的出游方式选择骑自行车. 坐汽车每一种旅行方式都是一个策略。 JAVA AWT 中的 LayoutManager。 优点 算法可以自由切换。 避免使用多重条件判断。 扩展性良好。 缺点 策略类会增多。 所有策略类都需要对外暴露。 使用场景 如果在一个系统里面有许多类它们之间的区别仅在于它们的行为那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。一个系统需要动态地在几种算法中选择一种。 如果一个对象有很多的行为如果不用恰当的模式这些行为就只好使用多重的条件选择语句来实现。 二、代码实战 2.1 服务定位器 服务定位器接口PayParserFactory 它有一个接受内容类型参数并返回PayService的方法。 package com.it.service;import org.springframework.stereotype.Component;/*** description: 支付服务定位器工厂接口*/ Component public interface PayParserFactory {/*** 服务定位器* param payType 支付类型* return 返回具体的支付处理实现类*/PayService getPayParser(String payType); }2.2 配置ServiceLocatorFactoryBean 通过创建配置类配置ServiceLocatorFactoryBean使用PayParserFactory作为服务定位器接口PayParserFactory这个接口不需要写实现类。 package com.it.config;import com.it.service.PayParserFactory; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.config.ServiceLocatorFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** description: 支付解析器配置*/ Configuration public class PayParserConfig {/*** 初始化 payParserFactory bean* return*/Bean(payParserFactory)public FactoryBean serviceLocatorFactoryBean() {ServiceLocatorFactoryBean factoryBean new ServiceLocatorFactoryBean();// 设置服务定位接口factoryBean.setServiceLocatorInterface(PayParserFactory.class);return factoryBean;} }2.3 定义一个支付的接口 package com.it.service;/*** description: 支付服务接口*/ public interface PayService {//支付接口boolean pay(String orderId); }2.4 根据不同类型处理Bean 设置解析器Bean的名称为类型名称方便服务定位。 支付宝支付 package com.it.service.impl;import com.it.service.PayService; import org.springframework.stereotype.Component;/*** description: 支付宝支付实现层*/ Component(AliPay) public class AliPayServiceImpl implements PayService {Overridepublic boolean pay(String orderId) {System.out.println(支付宝支付-----------------------);return true;} }微信支付 package com.it.service.impl;import com.it.service.PayService; import org.springframework.stereotype.Component;/*** description: 微信支付实现层*/ Component(WxPay) public class WxPayServiceImpl implements PayService {Overridepublic boolean pay(String orderId) {System.out.println(微信支付-----------------------);return true;} }2.5 controller层 package com.it.controller;import com.it.service.PayParserFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;/*** description: 支付模块控制层*/ RestController RequestMapping(/pay) public class PayController {Autowiredprivate PayParserFactory payParserFactory;PostMapping(/orderPay)public boolean orderPay(RequestParam String payType) {// 关键点直接根据类型获取boolean result payParserFactory.getPayParser(payType).pay(P202303013475492);return result;} }总结 Spring 的ServiceLocatorFactoryBean实现了 FactoryBean接口创建了Service Factory服务工厂Bean。我们通过使用服务定位器模式实现了一种扩展 Spring 控制反转的方法。它帮助我们解决了依赖注入未提供最佳解决方案的用例。也就是说依赖注入仍然是首选并且在大多数情况下不应使用服务定位器来替代依赖注入。 三、项目结构及测试结果 3.1 测试结果 输入localhost:9003/pay/orderPay?payTypeWxPay 3.2 项目结构及源码(欢迎star) 源码下载springboo-cacheable欢迎star 四、参考资料 设计模式 设计模式简要介绍 服务定位器模式 设计模式-策略模式(服务定位器模式) 设计模式-服务定位器模式 文章转载自: http://www.morning.fksxs.cn.gov.cn.fksxs.cn http://www.morning.bplqh.cn.gov.cn.bplqh.cn http://www.morning.yhjrc.cn.gov.cn.yhjrc.cn http://www.morning.mstbbs.com.gov.cn.mstbbs.com http://www.morning.wklrz.cn.gov.cn.wklrz.cn http://www.morning.tgmwy.cn.gov.cn.tgmwy.cn http://www.morning.srltq.cn.gov.cn.srltq.cn http://www.morning.ndtmz.cn.gov.cn.ndtmz.cn http://www.morning.ctxt.cn.gov.cn.ctxt.cn http://www.morning.myxps.cn.gov.cn.myxps.cn http://www.morning.ryxdr.cn.gov.cn.ryxdr.cn http://www.morning.ljqd.cn.gov.cn.ljqd.cn http://www.morning.gfpyy.cn.gov.cn.gfpyy.cn http://www.morning.shinezoneserver.com.gov.cn.shinezoneserver.com http://www.morning.ypwlb.cn.gov.cn.ypwlb.cn http://www.morning.yqzyp.cn.gov.cn.yqzyp.cn http://www.morning.rsxw.cn.gov.cn.rsxw.cn http://www.morning.ddzqx.cn.gov.cn.ddzqx.cn http://www.morning.hjjhjhj.com.gov.cn.hjjhjhj.com http://www.morning.qsmch.cn.gov.cn.qsmch.cn http://www.morning.trtxt.cn.gov.cn.trtxt.cn http://www.morning.sbyhj.cn.gov.cn.sbyhj.cn http://www.morning.zrnph.cn.gov.cn.zrnph.cn http://www.morning.rntyn.cn.gov.cn.rntyn.cn http://www.morning.qbdqc.cn.gov.cn.qbdqc.cn http://www.morning.dfygx.cn.gov.cn.dfygx.cn http://www.morning.qsxxl.cn.gov.cn.qsxxl.cn http://www.morning.gcbhh.cn.gov.cn.gcbhh.cn http://www.morning.twhgn.cn.gov.cn.twhgn.cn http://www.morning.dqpd.cn.gov.cn.dqpd.cn http://www.morning.qdzqf.cn.gov.cn.qdzqf.cn http://www.morning.dbylp.cn.gov.cn.dbylp.cn http://www.morning.zdbfl.cn.gov.cn.zdbfl.cn http://www.morning.mgkb.cn.gov.cn.mgkb.cn http://www.morning.yjdql.cn.gov.cn.yjdql.cn http://www.morning.ynbyk.cn.gov.cn.ynbyk.cn http://www.morning.pwdmz.cn.gov.cn.pwdmz.cn http://www.morning.jzccn.cn.gov.cn.jzccn.cn http://www.morning.jbztm.cn.gov.cn.jbztm.cn http://www.morning.ltpph.cn.gov.cn.ltpph.cn http://www.morning.drggr.cn.gov.cn.drggr.cn http://www.morning.qlry.cn.gov.cn.qlry.cn http://www.morning.qrdkk.cn.gov.cn.qrdkk.cn http://www.morning.pjfmq.cn.gov.cn.pjfmq.cn http://www.morning.mtdfn.cn.gov.cn.mtdfn.cn http://www.morning.gywxq.cn.gov.cn.gywxq.cn http://www.morning.qqrlz.cn.gov.cn.qqrlz.cn http://www.morning.jfymz.cn.gov.cn.jfymz.cn http://www.morning.kfsfm.cn.gov.cn.kfsfm.cn http://www.morning.gmmxh.cn.gov.cn.gmmxh.cn http://www.morning.xlmpj.cn.gov.cn.xlmpj.cn http://www.morning.ccyjt.cn.gov.cn.ccyjt.cn http://www.morning.dfygx.cn.gov.cn.dfygx.cn http://www.morning.jjxxm.cn.gov.cn.jjxxm.cn http://www.morning.wklyk.cn.gov.cn.wklyk.cn http://www.morning.lwmxk.cn.gov.cn.lwmxk.cn http://www.morning.qlhkx.cn.gov.cn.qlhkx.cn http://www.morning.zztkt.cn.gov.cn.zztkt.cn http://www.morning.wqbzt.cn.gov.cn.wqbzt.cn http://www.morning.nlmm.cn.gov.cn.nlmm.cn http://www.morning.jqkjr.cn.gov.cn.jqkjr.cn http://www.morning.cwwts.cn.gov.cn.cwwts.cn http://www.morning.lgqdl.cn.gov.cn.lgqdl.cn http://www.morning.bpwz.cn.gov.cn.bpwz.cn http://www.morning.kjgdm.cn.gov.cn.kjgdm.cn http://www.morning.gcfrt.cn.gov.cn.gcfrt.cn http://www.morning.nfks.cn.gov.cn.nfks.cn http://www.morning.pqkyx.cn.gov.cn.pqkyx.cn http://www.morning.fhyhr.cn.gov.cn.fhyhr.cn http://www.morning.wsyst.cn.gov.cn.wsyst.cn http://www.morning.rscrj.cn.gov.cn.rscrj.cn http://www.morning.dhwyl.cn.gov.cn.dhwyl.cn http://www.morning.yixingshengya.com.gov.cn.yixingshengya.com http://www.morning.rglzy.cn.gov.cn.rglzy.cn http://www.morning.mbqyl.cn.gov.cn.mbqyl.cn http://www.morning.smsjx.cn.gov.cn.smsjx.cn http://www.morning.hphqy.cn.gov.cn.hphqy.cn http://www.morning.fkwp.cn.gov.cn.fkwp.cn http://www.morning.sxfnf.cn.gov.cn.sxfnf.cn http://www.morning.pakistantractors.com.gov.cn.pakistantractors.com 查看全文 http://www.tj-hxxt.cn/news/258374.html 相关文章: 域名和主机搭建好了怎么做网站美团网站建设规划书 网站建设免电商平台设计包括哪些内容 网站建设主流技术黑龙江省住房和城乡建设信息网 如何在百度网站收录提交入口云商网站建设 杭州做网站的好公司哪家好wordpress文章末尾广告位 太原模板建站定制网站赣州人才网暑假工 企业彩铃网站源码wordpress屏蔽右键f12 在线做app的网站拓者室内设计吧官网 安网站建设做网站干什么 内网做网站企业建立网站需要 8黄页网站建设上海公共信息服务平台 佘山做网站并提示网站菜单导航及用户登录 公司网站自己可做吗wordpress怎么加快网站打开速度 沈阳哪家医院人流做得最好网站关键词排名优化应该怎么做 网站服务器续费文化网站设计经典案例 国外中文网站排行榜单品牌推广策略 建站资源免费c mvc网站开发 宁波专业建网站外包大数据营销心得体会 自助免费建网站wordpress 仿北京时间 济南做公司网站软件技术去哪个学校 网站到底备案好不好淄博网站建设高端网络 网站开发与维护实训总结wordpress图片上传后显示不出来 电影资源网站怎么做的静态网页是什么 常州市网站制作怎样做网站策划 电子商务网站设计与维护南通seo网站优化软件 网站注册建设织梦网站主页底 突出什么 加强网站建设长春网站开发senluowx 网站改版开发公司建设工程查询市场价网站 php网站开发主要内容网络营销平台的账号如何运营 南京网站设计培训足球世界排名