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

做网站采集北京游戏网站建设

做网站采集,北京游戏网站建设,域名查询网站入口,手动搭建wordpress模板方法模式(行为模式) 1. 模板方法模式介绍 父类定义算法骨架,细节的具体实现延迟到子类子类只是定义某些自己的个性化处理,但不改变执行顺序 2. 好处 减少代码冗余,共性抽取后算法流程更加清晰与规范降低流程性…

模板方法模式(行为模式)

1. 模板方法模式介绍

  • 父类定义算法骨架,细节的具体实现延迟到子类
  • 子类只是定义某些自己的个性化处理,但不改变执行顺序

2. 好处

  • 减少代码冗余,共性抽取后算法流程更加清晰与规范
  • 降低流程性错误的可能,开发类似的新需求,能通过父类算法骨架清晰理出流程
  • 定义了统一执行标准,便于管理与控制流程
  • 子类仅需要实现自己的个性化业务,修改自己的业务不会影响其他业务,符合单一职责原则

3. 场景案例

  • 项目中会开发大量实时变化的榜单,榜单的更新与查询流程基本都相同,如:公共校验、个性化校验、榜单排名获取、符合规则上榜、不符合规则下榜,但不同榜单校验方式与获取渠道不同
    • 使用模板方法模式
    • 接口添加为需要的抽象方法
    • 抽象类实现接口添加算法骨架与实现统一的抽象方法,同时使用接口的抽象方法
    • 具体的榜单需要继承抽象父类,实现抽象方法,然后调用算法骨架方法即可
  • 一对一视频聊有三中场景,执行流程均相同,但是计费规则等业务不同
    • 抽象父类定义执行顺序
    • 三种场景:一对一、直播转向、速配,直接继承父类处理规则,然后实现自己具体的计费规则

4. 案例源码

  • 代码结构
├── IRank.java
├── base
│   └── AbstractBaseRank.java
├── bean
│   ├── RankDelReq.java
│   └── RankMessageReq.java
├── ext
│   └── ExtServiceImpl.java
└── impl└── RankServiceImpl.java
  • 公共榜单接口
public interface IRank {/*** 公用判断,是否被审核处罚等处理,返回判断结果* @return {@code 0} 正常、不用下榜(也可使用 Enum 枚举)*/int getCommLimit(long userId);/*** 个性化判断,返回判断结果* @return {@code 0} 正常、不用下榜(也可使用 Enum 枚举)*/int getRankUp(long userId);/*** 查询用户在榜单的分数* @return 返回分数 Redis 中 zset 数据结构的 score*          {@code null} 分数为 null 需要下榜单,*/Double getScore(long userId);/*** 用户上榜* @return {@code true} 用户上榜成功*/boolean doRankUp(RankDelReq rankDelReq);/*** 用户下榜* @return {@code true} 用户下榜成功*/boolean doRankDown(RankDelReq rankDelReq);
}
  • 公共榜单抽象父类
    • 定义算法骨架,实现公共的方法
public abstract class AbstractBaseRank implements IRank {/*** 榜单处理流程*/public void dealRank(RankMessageReq rankMessage) {// 判空if (rankMessage == null || rankMessage.getUserId() == null) {System.out.println(String.format("传入信息异常:%s", rankMessage));return;}long userId = rankMessage.getUserId();// 公共判断int commLimit = getCommLimit(userId);// 不符合则下榜if (commLimit != 0) {boolean rankDownFlag = doRankDown(new RankDelReq(userId, null, commLimit));System.out.println(String.format("用户:%s 不符合公共判断下榜单:%s 下榜结果:%s", userId, commLimit, rankDownFlag));return;}// 个性化判断int rankUpLimit = getRankUp(userId);// 不符合则下榜if (rankUpLimit != 0) {boolean rankDownFlag = doRankDown(new RankDelReq(userId, null, rankUpLimit));System.out.println(String.format("用户:%s 不符合个性化判断下榜单:%s 下榜结果:%s", userId, rankUpLimit, rankDownFlag));return;}// 返回分数Double score = getScore(userId);// 分数为 null 则下榜if (score == null) {boolean rankDownFlag = doRankDown(new RankDelReq(userId, score, null));System.out.println(String.format("用户:%s 没有分数判断下榜单 下榜结果:%s", userId, rankDownFlag));return;}boolean rankUpFlag = doRankUp(new RankDelReq(userId, score, null));System.out.println(String.format("用户:%s 上榜结果:%s", userId, rankUpFlag));}/*** 公用判断,是否被审核处罚等处理,返回判断结果* @return {@code 0} 正常、不用下榜(也可使用 Enum 枚举)*/@Overridepublic int getCommLimit(long userId) {// 被冻结if (ExtServiceImpl.isFreeze(userId)) {System.out.println(String.format("用户:%s 被冻结:%s", userId));return 1;}// 被禁玩if (ExtServiceImpl.isBan(userId)) {System.out.println(String.format("被禁玩:%s", userId));return 2;}// 榜单审核中if (ExtServiceImpl.isRankAudit(userId)) {System.out.println(String.format("榜单审核中:%s", userId));return 3;}return 0;}
}
  • 具体某个榜单实现类
public class RankServiceImpl extends AbstractBaseRank {/*** 个性化判断,返回判断结果* @return {@code 0} 正常、不用下榜(也可使用 Enum 枚举)*/@Overridepublic int getRankUp(long userId) {System.out.println("个性化判断");return 0;}/*** 查询用户在榜单的分数* @return 返回分数 Redis 中 zset 数据结构的 score*          {@code null} 分数为 null 需要下榜单,*/@Overridepublic Double getScore(long userId) {System.out.println("查询用户在榜单的分数");return 0D;}/*** 用户上榜* @return {@code true} 用户上榜成功*/@Overridepublic boolean doRankUp(RankDelReq rankDelReq) {System.out.println("用户上榜");return true;}/*** 用户下榜* @return {@code true} 用户下榜成功*/@Overridepublic boolean doRankDown(RankDelReq rankDelReq) {System.out.println("用户下榜");return true;}
}
  • 单元测试代码
public class RankServiceImplTest {@Testpublic void test() {RankServiceImpl rankServiceImpl = new RankServiceImpl();System.out.println(String.format("用户:%s 榜单处理", 2808253L));rankServiceImpl.dealRank(new RankMessageReq(2808253L));System.out.println();System.out.println(String.format("用户:%s 榜单处理", null));rankServiceImpl.dealRank(new RankMessageReq(null));}
}
http://www.yayakq.cn/news/884371/

相关文章:

  • 网站内页设计wordpress分类页获取分类名称
  • 网站的动态体验图是什么软件做的沧州市网站制作
  • 双辽建设局网站拓者设计吧免费获取注册码
  • 网站建设环境配置中国建材人才网
  • 智能手机网站建设有哪些专门做展会创意的网站
  • 电商数据分析师国内谷歌网站SEO优化
  • 静态网站建设百度明令禁止搜索的词
  • 南昌专门做网站的人广州网站案例展示
  • 事业单位网站方案邯郸市建设局网站2017
  • 易思企业网站管理系统宁波品牌网站制作哪家好
  • 与有权重网站做友链东莞营销型手机网站建设
  • 园岭中小网站建设建立网站兴田德润电话多少
  • 网络公司网站程序怎么建设分销模式手机网站
  • 专业生产佛山网站建设黑龙江省营商环境建设监督局网站
  • 网站建设一六八互联hostinger建站wordpress
  • zencart 网站安装青海西宁今天刚刚紧急通知
  • 广西电商网站无锡网站建设哪里好
  • 你的网站正在建设中seo推广教程seo高级教程
  • 中国建设银行官网网站首页开工作室做什么项目赚钱
  • 中国建设银行有哪些招聘网站郑州网站zhi zuo
  • 国外空间做网站怎么样郑州电商运营公司排行
  • 集团企业网站建设湖南中小企业建站价格
  • 中文博客网站模板我请网络公司做的网站上的图片被当广告拦截了_怎么回事
  • 网站运维公司有哪些服务平台官网
  • 大连网站开发费多少钱哪里有零基础网站建设教学培训
  • anker 网站建设风中有朵雨做的云网站观看
  • 网站验证做一个企业网站需要多少钱
  • 去哪里购买网站空间网站制作的常见问题
  • 手机移动开发网站建设南昌网站建设如何
  • 做网站公司实力排名网站目录权限设置 user