码农的强迫症|为了不让代码看起来像一坨* 我在工作中反复用了这个

本文讲述了如何在日常工作中运用设计模式,如责任链、策略、模板、观察者、装饰器和外观模式,来提升代码质量,降低业务代码的复杂度。通过具体的实践案例,解释了这些模式在不同场景下的应用,以实现代码的可维护性和灵活性。
摘要由CSDN通过智能技术生成

大多数时候我都是写一些业务代码,可能一堆CRUD就能解决问题,但是这样的工作对技术人的提升并不多,如何让自己从业务中解脱出来找到写代码的乐趣呢,我做过一些尝试,使用设计模式改善自己的业务代码就是其中的一种。

责任链设计模式

定义

请求在一个链条上处理,链条上的受理者处理完毕之后决定是继续往后传递还是中断当前处理流程。

适用场景

适用于多节点的流程处理,每个节点完成各自负责的部分,节点之间不知道彼此的存在,比如OA的审批流,java web开发中的Filter机制。举一个生活中的例子,笔者之前租房的时候遇到了所谓的黑中介,租的时候感觉自己是上帝,但是坏了东西找他修的时候就像个孙子一样,中介让我找门店客服,门店客服又让我找房东,房东又让我找她家老公,最终好说歹说才把这事了了(租房一定要找正规中介)。

实践经验

笔者目前所做的业务是校园团餐的聚合支付,业务流程很简单,1.学生打开手机付款码支付,2.食堂大妈使用机具扫付款码收款。大学食堂有个背景是这样的,食堂有补贴,菜品比较便宜,所以学校是不愿意让社会人士去学校食堂消费的,鉴于此,我们在支付之前加了一套是否允许支付的检验逻辑,大体如下:

1.某档口只允许某类用户用户消费,比如教师档口只允许教师消费,学生档口不允许校外用户消费;2.某个档口一天只允许某类用户消费几次,比如教师食堂一天只允许学生消费一次;3.是否允许非清真学生消费,比如某些清真餐厅,是不允许非清真学生消费的;

针对这几类情况我建立了三类过滤器,分别是:

SpecificCardUserConsumeLimitFilter:按用户类型判断是否允许消费

DayConsumeTimesConsumeLimitFilter:按日消费次数判断是否允许消费

MuslimConsumeLimitFilter:非清真用户是否允许消费

判断逻辑是先通过SpecificCardUserConsumeLimitFilter判断当前用户是否可以在此档口消费,如果允许继续由DayConsumeTimesConsumeLimitFilter判断当天消费次数是否已用完,如果未用完继续由MuslimConsumeLimitFilter判断当前用户是否满足清真餐厅的就餐条件,前面三条判断,只要有一个不满足就提前返回。

部分代码如下:

public boolean canConsume(String uid,String shopId,String supplierId){
    //获取用户信息,用户信息包含类型(student:学生,teacher:老师,unknown:未知用户)、名族(han:汉族,mg:蒙古族)
    UserInfo userInfo = getUserInfo(uid);    //获取消费限制信息,限制信息包含是否允许非清真消费、每种类型的用户是否允许消费以及允许消费的次数
   ConsumeConfigInfo consumeConfigInfo = getConsumeConfigInfo(shopId,supplierId)     // 构造消费限制过滤器链条
    ConsumeLimitFilterChain filterChain = new ConsumeLimitFilterChain();
    filterChain.addFilter(new SpecificCardUserConsumeLimitFilter());
    filterChain.addFilter(new DayConsumeTimesConsumeLimitFilter());
    filterChain.addFilter(new MuslimConsumeLimitFilter());
    boolean checkResult = filterChain.doFilter(filterChain, schoolMemberInfo, consumeConfigInfo);    //filterChain.doFilter方法
   public boolean doFilter(ConsumeLimitFilterChain filterChain,UserInfo userInfo,    ConsumeConfigInfo consumeConfigInfo ){  //迭代调用过滤器
  if(index<filters.size()){
      return filters.get(index++).doFilter(filterChain, userInfo, consumeConfigInfo);
  }    }    //SpecificCardUserConsumeLimitFilter.doFilter方法
     public boolean doFilter(ConsumeLimitFilterChain filterChain,UserInfo userInfo,    ConsumeConfigInfo consumeConfigInfo ){                //获取某一类型的消费限制,比如student允许消费,unknown不允许消费
  CardConsu
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基本的鲜花绽放效果的代码,使用了CSS3的transition和animation动画效果,JavaScript控制花瓣的数量和位置,可以在500*500px的盒子实现: HTML代码: ```html <div class="flower"></div> ``` CSS代码: ```css .flower { width: 300px; height: 300px; background: url("https://cdn.pixabay.com/photo/2017/02/24/12/22/flower-2090641_1280.png") no-repeat center center; background-size: 100%; position: relative; overflow: hidden; } .flower .petal { position: absolute; width: 20px; height: 20px; background: url("https://cdn.pixabay.com/photo/2017/02/24/12/22/flower-2090641_1280.png") no-repeat center center; background-size: 100%; transition: all 0.5s ease-out; animation: petal-fall 5s ease-out infinite; } @keyframes petal-fall { 0% { transform: translateY(-100%) rotate(0deg); } 100% { transform: translateY(100%) rotate(360deg); } } .flower .petal:nth-child(1) { top: 20%; left: 15%; transform: rotate(45deg); } .flower .petal:nth-child(2) { top: 20%; right: 15%; transform: rotate(-45deg); } .flower .petal:nth-child(3) { bottom: 20%; left: 15%; transform: rotate(-45deg); } .flower .petal:nth-child(4) { bottom: 20%; right: 15%; transform: rotate(45deg); } ``` JavaScript代码: ```javascript var flower = document.querySelector(".flower"); // 花瓣数量 var petalCount = 4; // 循环创建花瓣 for (var i = 1; i <= petalCount; i++) { var petal = document.createElement("div"); petal.className = "petal"; flower.appendChild(petal); } ``` 将以上代码复制到HTML、CSS、JavaScript文件即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值