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

网站建设先进怎么给自己的网站做扫描码

网站建设先进,怎么给自己的网站做扫描码,遵义网站建设遵义,wordpress的开发文档文章目录 一、定义#xff1a;依赖倒置原则二、模拟场景#xff1a;依赖倒置原则三、违背方案#xff1a;依赖倒置原则3.1 工程结构3.2 抽奖系统**3.2.1 定义抽奖用户类**3.2.2 抽奖控制 3.3 单元测试 四、改善代码#xff1a;依赖倒置原则4.1 工程结构4.2 抽奖控制改善4.2… 文章目录 一、定义依赖倒置原则二、模拟场景依赖倒置原则三、违背方案依赖倒置原则3.1 工程结构3.2 抽奖系统**3.2.1 定义抽奖用户类**3.2.2 抽奖控制 3.3 单元测试 四、改善代码依赖倒置原则4.1 工程结构4.2 抽奖控制改善4.2.1 定义抽奖用户类4.2.2 抽奖接口4.2.3 随机抽奖实现4.2.4 权重抽奖实现4.2.5 创建抽奖服务 4.3 单元测试 一、定义依赖倒置原则 依赖倒置原则Dependence Inversion PrincipleDIP。 在设计代码架构时高层模块不应该依赖于底层模块二者都应该依赖于抽象。抽象不应该依赖于细节细节应该依赖于抽象。依赖倒置原则是实现开闭原则的重要途经之一它降低了类之间的耦合提高了系统的稳定性和可维护性同时这样的代码一般更易读且便于传承。 二、模拟场景依赖倒置原则 在互联网的营销活动中经常为了拉新和促活会做一些抽奖活动。这些抽奖活动的规则会随着业务的不断发展而调整。 如随机抽奖、权重抽奖等。其中权重是指用户在当前系统中的一个综合排名比如活跃度、贡献度等。 模拟出抽奖的一个系统服务。 如果是初次搭建这样的系统会怎么实现呢这个系统是否有良好的扩展性和可维护性同时在变动和新增业务时测试的复杂度是否高 三、违背方案依赖倒置原则 3.1 工程结构 design-1.6-0 |——src|——main|--java|--com.lino.design|--BetUser.java|--DrawControl.java|——test|--java|--com.lino.design.test|--ApiTest.java3.2 抽奖系统 3.2.1 定义抽奖用户类 BetUser.java package com.lino.design;/*** description: 投注用户*/ public class BetUser {/*** 用户姓名*/private String userName;/*** 用户权重*/private int userWeight;public BetUser() {}public BetUser(String userName, int userWeight) {this.userName userName;this.userWeight userWeight;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;}public int getUserWeight() {return userWeight;}public void setUserWeight(int userWeight) {this.userWeight userWeight;} }这个类就是一个普通的对象类其中包括了用户姓名和对应的权重方便满足不同的抽奖方式。 3.2.2 抽奖控制 DrawControl.java package com.lino.design;import java.util.ArrayList; import java.util.Collections; import java.util.List;/*** description: 抽奖控制*/ public class DrawControl {/*** 随机抽取指定数量的用户作为中奖用户** param list 用户列表* param count 中奖用户数量* return 中奖用户列表*/public ListBetUser doDrawRandom(ListBetUser list, int count) {// 集合数量很小直接返回if (list.size() count) {return list;}// 乱序集合Collections.shuffle(list);// 取出指定数量的中奖用户ListBetUser prizeList new ArrayList(count);for (int i 0; i count; i) {prizeList.add(list.get(i));}return prizeList;}public ListBetUser doDrawWeight(ListBetUser list, int count) {// 按照权重排序list.sort(((o1, o2) - {int e o2.getUserWeight() - o1.getUserWeight();if (0 e) {return 0;}return e 0 ? 1 : -1;}));// 取出指定数量的中奖用户ListBetUser prizeList new ArrayList(count);for (int i 0; i count; i) {prizeList.add(list.get(i));}return prizeList;} }在一个类中实现两种不同的抽奖逻辑。随机抽奖和权重抽奖。 3.3 单元测试 ApiTest.java Test public void test_DrawControl() {ListBetUser betUserList new ArrayList();betUserList.add(new BetUser(花花, 65));betUserList.add(new BetUser(豆豆, 43));betUserList.add(new BetUser(小白, 72));betUserList.add(new BetUser(笨笨, 89));betUserList.add(new BetUser(丑蛋, 10));DrawControl drawControl new DrawControl();ListBetUser prizeRandomUserList drawControl.doDrawRandom(betUserList, 3);logger.info(随机抽奖中奖用户名单{}, JSON.toJSON(prizeRandomUserList));ListBetUser prizeWeightUserList drawControl.doDrawWeight(betUserList, 3);logger.info(权重抽奖中奖用户名单{}, JSON.toJSON(prizeWeightUserList)); }在初始化数据后分别调用两个接口方法进行测试。 测试结果 14:50:54.496 [main] INFO com.lino.design.test.ApiTest - 随机抽奖中奖用户名单[{userWeight:89,userName:笨笨},{userWeight:10,userName:丑蛋},{userWeight:65,userName:花花}] 14:50:54.527 [main] INFO com.lino.design.test.ApiTest - 权重抽奖中奖用户名单[{userWeight:89,userName:笨笨},{userWeight:72,userName:小白},{userWeight:65,userName:花花}] 从测试结果上看程序没有问题验证结果正常。但是这样实现有什么问题呢如果程序是一次性的、几乎不变的那么不考虑很多的扩展性和可维护性因素。 但如果这些程序具有不确定性或者当业务发展时需要不断地调整和新增那么这样的实现方式就很不友好了。 首先这样的实现方式扩展起来很麻烦每次扩展都需要新增接口同时对于调用方来说需要新增调用接口的代码。 其次对于这个服务类来说随着接口数量的增加代码行数会不断地暴增最后难以维护。 四、改善代码依赖倒置原则 4.1 工程结构 design-1.6-1 |——src|——main|--java|--com.lino.design|--BetUser.java|--DrawControl.java|--DrawRandom.java|--DrawWeightRank.java|--IDraw.java|——test|--java|--com.lino.design.test|--ApiTest.java4.2 抽奖控制改善 4.2.1 定义抽奖用户类 BetUser.java package com.lino.design;/*** description: 投注用户*/ public class BetUser {/*** 用户姓名*/private String userName;/*** 用户权重*/private int userWeight;public BetUser() {}public BetUser(String userName, int userWeight) {this.userName userName;this.userWeight userWeight;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;}public int getUserWeight() {return userWeight;}public void setUserWeight(int userWeight) {this.userWeight userWeight;} }这个类就是一个普通的对象类其中包括了用户姓名和对应的权重方便满足不同的抽奖方式。 4.2.2 抽奖接口 IDraw.java package com.lino.design;import java.util.List;/*** description: 抽奖接口*/ public interface IDraw {/*** 抽奖** param list 用户列表* param count 中奖数量* return 中奖用户列表*/ListBetUser prize(ListBetUser list, int count); }定义一个抽奖接口接口中包括了需要传输的 list 集合以及中奖用户数量。 4.2.3 随机抽奖实现 DrawRandom.java package com.lino.design;import java.util.ArrayList; import java.util.Collections; import java.util.List;/*** description: 随机抽奖*/ public class DrawRandom implements IDraw {Overridepublic ListBetUser prize(ListBetUser list, int count) {// 集合数量很小直接返回if (list.size() count) {return list;}// 乱序集合Collections.shuffle(list);// 取出指定数量的中奖用户ListBetUser prizeList new ArrayList(count);for (int i 0; i count; i) {prizeList.add(list.get(i));}return prizeList;} }4.2.4 权重抽奖实现 DrawWeightRank.java package com.lino.design;import java.util.ArrayList; import java.util.List;/*** description: 权重抽奖*/ public class DrawWeightRank implements IDraw {Overridepublic ListBetUser prize(ListBetUser list, int count) {// 按照权重排序list.sort(((o1, o2) - {int e o2.getUserWeight() - o1.getUserWeight();if (0 e) {return 0;}return e 0 ? 1 : -1;}));// 取出指定数量的中奖用户ListBetUser prizeList new ArrayList(count);for (int i 0; i count; i) {prizeList.add(list.get(i));}return prizeList;} }4.2.5 创建抽奖服务 DrawControl.java package com.lino.design;import java.util.List;/*** description: 抽奖控制*/ public class DrawControl {/*** 抽奖接口*/private IDraw draw;/*** 发起抽奖** param draw 抽奖类型* param betUserList 用户列表* param count 中奖数量* return 中奖的用户列表*/public ListBetUser doDraw(IDraw draw, ListBetUser betUserList, int count) {return draw.prize(betUserList, count);} }这个类中提现了依赖倒置的重要性可以把任何一种抽奖逻辑传递给这个类。这样实现的好处是可以不断地扩展但是不需要在外部新增调用接口降低了一套代码的维护成本并提高了可扩展性及可维护性。 4.3 单元测试 ApiTest.java Test public void test_DrawControl() {ListBetUser betUserList new ArrayList();betUserList.add(new BetUser(花花, 65));betUserList.add(new BetUser(豆豆, 43));betUserList.add(new BetUser(小白, 72));betUserList.add(new BetUser(笨笨, 89));betUserList.add(new BetUser(丑蛋, 10));DrawControl drawControl new DrawControl();ListBetUser prizeRandomUserList drawControl.doDraw(new DrawRandom(), betUserList, 3);logger.info(随机抽奖中奖用户名单{}, JSON.toJSON(prizeRandomUserList));ListBetUser prizeWeightUserList drawControl.doDraw(new DrawWeightRank(), betUserList, 3);logger.info(权重抽奖中奖用户名单{}, JSON.toJSON(prizeWeightUserList)); }测试结果 15:06:03.242 [main] INFO com.lino.design.test.ApiTest - 随机抽奖中奖用户名单[{userWeight:72,userName:小白},{userWeight:43,userName:豆豆},{userWeight:10,userName:丑蛋}] 15:06:03.273 [main] INFO com.lino.design.test.ApiTest - 权重抽奖中奖用户名单[{userWeight:89,userName:笨笨},{userWeight:72,userName:小白},{userWeight:65,userName:花花}]这里与前面代码唯一不同的是新增了实现抽奖的入参 new DrawRandom()、new DrawWeightRank()。 在这两个抽奖的功能逻辑作为入参后扩展起来会非常的方便。 以这种抽象接口为基准搭建起来的框架结构会更加稳定算程已经建设好外部只需要实现自己的算子即可最终把算子交给算程处理。
http://www.yutouwan.com/news/168445/

相关文章:

  • 企业网站建设是什么宁波随身云网络科技有限公司
  • 网站有风险提示怎么办如何自学3d建模
  • 天门市网站建设建设一个网站需要哪些员工
  • 江门公司做网站做网站找云无限
  • 做网站的人联系电话领地免费网站程序
  • 网站设计实例网站开发项目答辩主持词
  • 津南区提供网站建设协议wordpress 排行
  • 茶叶淘宝店网站建设pptaspx网站开发 案例
  • 境外网站icp备案做网站的可以信吗
  • 在深圳怎么进大公司网站建设工程有限公司是做什么的
  • sap.net怎么做网站广州做网站多
  • 吴江盛泽建设局网站大三亚app下载
  • 苏州市城乡和建设局网站怎么免费建个人网站
  • 建设工程合同备案在什么网站上wordpress 截取文章内容
  • 建购物网站多少钱网站系统维护要多久
  • 贵阳网站建设电话在线网站建设机构
  • 曰本孕妇做爰网站深圳坪山高级中学
  • 福建住房和城乡建设局网站wordpress怎么加
  • 从哪个网站设置宽带主机wordpress插件自动更新
  • vs做网站通过e浏览器湘潭平台公司
  • 企业网站的价值体现是在怎么寻找做有益做网站的客户
  • 苏州建网站公司江苏住房城乡建设部部官方网站
  • 爱旅游网站制作北京到安阳高铁时刻表查询
  • 风烛源网站管理系统杭州营销型网站建设
  • 做国际网站花钱吗国内最好的在线网站建设
  • 电商设计网站有哪些在线购物网站 模版
  • 汽车网站建设参考文献开题报告百度地图广告投放
  • seo网站推广目的图片常采用gif或jpeg格式
  • 深圳微商城网站设计多少钱微信公众号网页怎么制作
  • 宁波拾谷网站建设毕业设计 建设网站