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

吉林门户网站建设公司名字大全免费取名

吉林门户网站建设,公司名字大全免费取名,seo任务优化网站排名,全景网站制作教程设计模式之策略模式实践 先了解一下策略模式的定义是什么#xff1f;解决什么问题 策略模式是一种行为设计模式#xff0c;它定义了一系列算法#xff0c;将每个算法封装成一个类#xff0c;并使它们可以互相替换。策略模式允许客户端在运行时从可互换的算法中选择一个解决什么问题 策略模式是一种行为设计模式它定义了一系列算法将每个算法封装成一个类并使它们可以互相替换。策略模式允许客户端在运行时从可互换的算法中选择一个而不必修改使用它们的代码。这模式提供了一种将算法独立于客户端而变化的方式。 策略模式主要包含以下几个角色 Context上下文 持有一个策略对象的引用负责将具体的算法委托给策略对象执行。Strategy策略 定义了一个算法族的接口所有具体策略类都必须实现该接口。这个接口通常只包含一个方法即算法的执行方法。ConcreteStrategy具体策略 实现了策略接口的具体算法类。每个具体策略类都封装了一个特定的算法。 使用场景 当一个系统中有许多类它们之间的区别仅在于它们的行为时可以使用策略模式将行为抽象为一个接口然后为每个具体行为实现一个策略类。当一个类定义了多种行为并且这些行为在该类的操作中以多个条件语句的形式出现时可以考虑使用策略模式将每个条件分支的实现封装到具体策略类中。当一个系统需要动态地在几种算法中选择一种时可以使用策略模式使得客户端可以根据需要切换算法。 策略模式的优点包括 提供了一种替代继承的方式避免了使用多重条件语句来选择算法。将算法的实现细节与客户端分离使得算法的变化不会影响到使用算法的客户端。 总之策略模式使得算法的变化独立于使用算法的客户端提高了系统的灵活性和可维护性。 理论讲完了进入正题 实践 当我们学习完设计模式的时候是不是总是想不出如何将设计模式运用到自己的项目中那么下面就使用一个我在项目中遇到的问题并使用设计模式对代码进行优化 简单功能介绍项目有一个每日领取积分的功能想根据不同的用户身份每日领取不同的积分 每日领取积分未优化前 ThrowUtils.throwIf(loginUser null, ErrorCode.NOT_LOGIN_ERROR); // 查询当前用户今日是否已经获取 QueryWrapperRewardRecord qw new QueryWrapper(); Long userId loginUser.getId(); LocalDateTime now LocalDateTime.now(); ListRewardRecord rewardRecords rewardRecordMapper.judgeTodayHasAdd(userId, now); if (!rewardRecords.isEmpty()) {throw new BusinessException(ErrorCode.OPERATION_ERROR, 今日已领取); } RewardRecord rewardRecord new RewardRecord(); rewardRecord.setRewardPoints(RewardRecordConstant.DAY_FREE_NUM); rewardRecord.setUserId(loginUser.getId()); boolean save this.save(rewardRecord); ThrowUtils.throwIf(!save, ErrorCode.SYSTEM_ERROR); UpdateWrapperUser userUpdateWrapper new UpdateWrapper(); // 获取积分 userUpdateWrapper.eq(id, loginUser.getId()).setSql(totalRewardPoints totalRewardPoints RewardRecordConstant.DAY_FREE_NUM); boolean update userService.update(userUpdateWrapper); ThrowUtils.throwIf(!update, ErrorCode.SYSTEM_ERROR); return true;原来领取的积分是写死的现在有个新的需求VIP每日可以获取20积分, SVIP每日可以获取40积分 想要实现上面的需求怎么做 大部分人下意识想到下面的实现方法 User user getUserInfo(); if(user 用户) {// ... } else if(user vip) {// ... } else if(user svip) {//... }难道我们要写这么多的if else吗假如我之后还要加另外的角色呢再往上面写if else吗那就不太体面了 其实我们完全可以使用策略模式策略模式其实就是用来优化这种多分支情况的 不同的情况对应不同的处理策略 话不多说我们以上面每日领取积分的案例看一下策略模式怎么应用上 首先我们要定义一个写一个策略的接口RoleService每一个策略实现类都要实现这个策略接口 /*** Author:HWQ* DateTime:2023/11/13 20:31* Description: 角色策略接口**/ public interface RoleService {/*** 判断是否是当前角色* return*/boolean isCurrentRole(String userType);/*** 获取每日积分的数量* return*/Integer getDayReward();/*** 获取最大的Token数* return*/Integer getMaxToken();/*** 获取图表保存天数* return*/Integer getChartSaveDay();/*** 获取对话保存信息* return*/Integer getChatSaveDay(); }编写策略实现类 // 普通用户 Service public class NormalUserService implements RoleService {Overridepublic boolean isCurrentRole(String userType) {ThrowUtils.throwIf(StringUtils.isEmpty(userType), ErrorCode.PARAMS_ERROR);return UserRoleEnum.USER.getValue().equals(userType);}Overridepublic Integer getDayReward() {return 10;}Overridepublic Integer getMaxToken() {return 2048;}Overridepublic Integer getChartSaveDay() {return 10;}Overridepublic Integer getChatSaveDay() {return 10;} }// vip用户 Service public class VIPUserService implements RoleService {Overridepublic boolean isCurrentRole(String userType) {ThrowUtils.throwIf(StringUtils.isEmpty(userType), ErrorCode.PARAMS_ERROR);return UserRoleEnum.VIP.getValue().equals(userType);}Overridepublic Integer getDayReward() {return 20;}Overridepublic Integer getMaxToken() {return 2048;}Overridepublic Integer getChartSaveDay() {return 30;}Overridepublic Integer getChatSaveDay() {return 30;} }在需要进行角色判断的地方注入策略Service 总结如果你的代码中 if…else 难以维护可以考虑使用策略模式进行优化 如果你觉得这篇文章对你有帮助可以关注一下后续会发更多的设计模式实践案例Happy coding
http://www.w-s-a.com/news/920922/

相关文章:

  • 网站做图尺寸大小手机模板网站模板下载网站有哪些内容
  • 德阳市建设管理一体化平台网站做美食网站
  • 怎么做自己的推广网站2024年瘟疫大爆发
  • vps正常网站打不开linux网站建设
  • 福州网站快速排名在一个网站的各虚拟目录中默认文档的文件名要相同
  • 网站开发 流程图网站开发用哪个linux
  • 怎么用自己电脑做服务器发布网站吗seo门户网价格是多少钱
  • 备案网站可以做影视站网站400
  • 四川住房与城乡建设部网站注册登记
  • 网站建设第三方沈阳工程最新动态
  • 兰州做网站客户上海企业在线登记
  • 新乡公司做网站wordpress被大量注册
  • 小语种服务网站公众号平台建设网站
  • 免费做mc皮肤网站企业网站建设合同模板
  • 做网站可以申请个体户么网站的定位分析
  • jsp做的零食网站下载wordpress侧边栏折叠
  • 帝国网站单页做301南京旅游网站建设公司
  • 网站sem优化怎么做网站建设推广安徽
  • 比较好的室内设计网站潍坊网络科技
  • 南宁网站建设公设计联盟网站
  • 多个图表统计的网站怎么做百度推广费2800元每年都有吗
  • 连江县住房和城乡建设局网站企业类网站模版
  • 临沂seo整站优化厂家网站建设 大公司排名
  • 网站开发有哪些方式百度导航怎么下载
  • 网站认证免费视频直播网站建设方案
  • 瀑布流分享网站源代码下载网站构建的一般流程是什么
  • wordpress 4.9 多站wordpress邮箱解析
  • 微信网站开发企业汽车网站设计模板
  • 如何提升网站转化率遵义市公共资源交易平台
  • 网站目录管理模板企业解决方案部