当前位置: 首页 > news >正文

昆明会员网站建设网站建设 天秀网络

昆明会员网站建设,网站建设 天秀网络,wordpress的页面,网站建设的经营范围在之前的文章中#xff0c;曾经给大家介绍过策略模式#xff1a;【设计模式】策略模式#xff0c;在该篇文章中#xff0c;我们曾很清楚的说到#xff0c;策略模式主要解决的问题是#xff1a;在有多种算法相似的情况下#xff0c;解决使用 if...else 所带来的复杂和难以… 在之前的文章中曾经给大家介绍过策略模式【设计模式】策略模式在该篇文章中我们曾很清楚的说到策略模式主要解决的问题是在有多种算法相似的情况下解决使用 if...else 所带来的复杂和难以维护。策略模式使我们的实现更加符合开闭原则面向扩展开发面向修改关闭。在后来的学习和工作的多次应用中有了更加深刻的认识。再次总结此篇文章赘述下。 此篇文章将以创建订单为例创建不同类型的订单不同类型的订单不同的处理逻辑。类图代码抽象策略Strategy角色抽象策略角色由抽象类或接口来承担它给出具体策略角色需要实现的接口package strategyTest;import strategyTest.dto.BaseRequestDTO;/*** 类 名 称CreateStrategy* 类 描 述策略抽象类* 创建时间2023/2/20 3:46 下午* 创 建 人admin*/ public abstract class AbstractOrderStrategy {public abstract Boolean isPracticable(BaseRequestDTO dto);// 业务执行总流程public ResponseResult process(BaseRequestDTO dto) {ResponseResult paramsValidate validateParams(dto);if (!paramsValidate.isSuccess()) {return paramsValidate;}ResponseResult ruleValidate validateRules(dto);if (!ruleValidate.isSuccess()) {return ruleValidate;}ResponseResult processResult doProcess(dto);if(processResult.isSuccess()){postProcessAction(dto);}return processResult;}// 参数校验protected abstract ResponseResult validateParams(BaseRequestDTO dto);// 业务规则校验protected abstract ResponseResult validateRules(BaseRequestDTO dto);// 核心实现protected abstract ResponseResult doProcess(BaseRequestDTO dto);// 后置处理(异步操作等)protected abstract void postProcessAction(BaseRequestDTO dto); } 2.具体策略ConcreteStrategy角色实现封装了具体的算法或行为顺风车类型处理package strategyTest.impl;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import strategyTest.AbstractOrderStrategy; import strategyTest.ResponseResult; import strategyTest.dto.BaseRequestDTO; import strategyTest.dto.SfcRequestDTO;/*** 类 名 称SfcImpl* 类 描 述TODO* 创建时间2023/2/20 3:58 下午* 创 建 人admin*/ Service public class SfcImpl extends AbstractOrderStrategy {private Logger logger LoggerFactory.getLogger(SfcImpl.class);Overridepublic Boolean isPracticable(BaseRequestDTO dto) {if(dto.getType() 1){return true;}return false;}Overrideprotected ResponseResult validateParams(BaseRequestDTO dto) {SfcRequestDTO sfcRequestDTO (SfcRequestDTO) dto;if (sfcRequestDTO.getIsShare() null || sfcRequestDTO.getIsShare() 0) return ResponseResult.ERROR;logger.info(sfc validateParams success);return ResponseResult.SUCCESS;}Overrideprotected ResponseResult validateRules(BaseRequestDTO dto) {// 无校验return ResponseResult.SUCCESS;}Overrideprotected ResponseResult doProcess(BaseRequestDTO dto) {logger.info(sfc doProcess success);return ResponseResult.SUCCESS;}Overrideprotected void postProcessAction(BaseRequestDTO dto) {logger.info(sfc 异步执行...);}} 巴士订单处理package strategyTest.impl;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import strategyTest.AbstractOrderStrategy; import strategyTest.ResponseResult; import strategyTest.dto.BaseRequestDTO; import strategyTest.dto.BusRequestDTO;/*** 类 名 称BusImpl* 类 描 述TODO* 创建时间2023/2/20 3:58 下午* 创 建 人admin*/ Service public class BusImpl extends AbstractOrderStrategy {private Logger logger LoggerFactory.getLogger(BusImpl.class);Overridepublic Boolean isPracticable(BaseRequestDTO dto) {if (dto.getType() 2) {return true;}return false;}Overrideprotected ResponseResult validateParams(BaseRequestDTO dto) {BusRequestDTO busRequestDTO (BusRequestDTO) dto;if (busRequestDTO.getRouteId() null || busRequestDTO.getRouteId() 0) return ResponseResult.ERROR;logger.info(bus validateParams success);return ResponseResult.SUCCESS;}Overrideprotected ResponseResult validateRules(BaseRequestDTO dto) {BusRequestDTO busRequestDTO (BusRequestDTO) dto;if (busRequestDTO.getSeats() ! null busRequestDTO.getSeats() 30) return ResponseResult.ERROR;logger.info(bus validateRules success);return ResponseResult.SUCCESS;}Overrideprotected ResponseResult doProcess(BaseRequestDTO dto) {logger.info(bus doProcess success);return ResponseResult.SUCCESS;}Overrideprotected void postProcessAction(BaseRequestDTO dto) {logger.info(bus 异步执行...);}} 3.上下文Context角色持有抽象策略类的引用。引用执行策略package strategyTest;import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; import strategyTest.dto.BaseRequestDTO;import java.util.ArrayList; import java.util.List; import java.util.Map;/*** 类 名 称StrategyContext* 类 描 述策略执行上下文* 创建时间2023/2/20 3:47 下午* 创 建 人admin*/ Component public class StrategyContext{// 策略管理类Autowiredprivate ListAbstractOrderStrategy strategies new ArrayList();// 获取策略类public AbstractOrderStrategy getStrategy(BaseRequestDTO dto) {for (AbstractOrderStrategy strategy : strategies) {if (strategy.isPracticable(dto)) {return strategy;}}return null;}} 调用方client可以在一个controller也可以写在多个controllerpackage strategyTest.controller;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import strategyTest.AbstractOrderStrategy; import strategyTest.ResponseResult; import strategyTest.StrategyContext; import strategyTest.dto.BaseRequestDTO; import strategyTest.dto.BusRequestDTO; import strategyTest.dto.SfcRequestDTO;/*** 类 名 称客户端请可以充当controller或者业务调用上游* 类 描 述TODO* 创建时间2023/2/20 3:58 下午* 创 建 人admin*/ RestController public class ClientTest {Autowiredprivate StrategyContext strategyContext;RequestMapping(/createSfc)public ResponseResult createSfc(SfcRequestDTO sfcRequestDTO){if(sfcRequestDTO null){return ResponseResult.ERROR;}return this.createOrder(sfcRequestDTO);}RequestMapping(/createBus)public ResponseResult createBus(BusRequestDTO busRequestDTO){if(busRequestDTO null){return ResponseResult.ERROR;}return this.createOrder(busRequestDTO);}private ResponseResult createOrder(BaseRequestDTO baseRequestDTO) {AbstractOrderStrategy strategy strategyContext.getStrategy(baseRequestDTO);if(strategy null){return ResponseResult.ERROR;}return strategy.process(baseRequestDTO);} } 我们看下运行结果sfc运行结果bus运行结果是不是非常简洁明了我们看完代码再结合类图看下此时如果我们想新增一种类型的创建订单流程比如创建一笔代驾订单需要如何做 我们只需要做两步1、新增一个代驾的实现类DjImpl继承StrategyContext类2、在Controller中新增一个方法(如果不同类型的订单有不在同一个controller可将createOrder方法抽象到父类controller此时新增一个子类controller继承父类和父类的方法即可)其他地方无需改动。。。其他类型的创建订单流程完全无改动无影响。下单流程解耦测试范围极大的降低。想想我们在项目中相似的场景写过多少if else。每次添加新的实现是否影响到原有功能。结合这篇文章希望能对读者朋友有所帮助。总结 策略模式帮助我们把相似的算法抽象使用上下文管理抽象类的具体实现每次新增算法时只需新增具体实现。使我们的代码轻松解耦符合开闭原则极大的缩小了影响范围。是成为一名优秀工程师的必修课
http://www.yayakq.cn/news/1997/

相关文章:

  • 网站 关于我们 模板系统下载 网站 源码
  • html5手机网站框架中铁建设集团有限公司招投标平台
  • 网站右边跳出的广告怎么做山东青岛网站建设公司
  • 自己专业做网站wordpress 主页 插件
  • 北京网站排行网站开发企业排名
  • 公司网站建设方法idc国外服务器
  • 电子商务网站建设规划方案论文软件下载
  • 网站开发需要数据库技术河池公司网站开发价格
  • 重庆璧山网站制作公司电话一个网站开发成本
  • 手机版网页制作软件东莞百度seo推广公司
  • 中山企业网站设计网站制作+资讯
  • 网站策划怎么做内容深圳市最新消息
  • 做导购网站有哪些建筑业管理平台登录
  • 做公司网站 需要注意什么营销网站seo推广费用
  • 怎么做网站扩展工程建设采购有哪些网站
  • 迪庆州建设局网站乐潍清网站额建设
  • 制作卡牌的网站wordpress自动广告
  • 网站备案信息如何注销吗近年来互联网公司排名
  • 佛山新网站制作咨询怎么用小皮创建网站
  • 网站出租目录做菠菜 有什么坏处wordpress查资料
  • 无锡市城市建设规划局网站鞍山做网站或
  • 网站首页快照更新快做网站时怎样申请域名
  • 可以做哪些网站有哪些网站建设如何做报价
  • 哪些做园林的网站qq群引流推广平台免费
  • 紫川网站建设wordpress 木马 查
  • 如何做网站费用多少怎么做微信公众号推文
  • 如何创建自己的网站平台免费北京西站到大兴机场
  • 网站页面优化内容包括哪些徐州做网站多少钱
  • 网站策划500字培训如何优化网站
  • 水果网店网站建设策划书wordpress 浏览器不居中