短信防刷浅谈对设计模式的应用

说起设计模式,可能很多开发小伙伴的印象是-一个牛逼的东西,我这里直接引用百度百科的解释:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。-百度百科

在互联网高速发展的8102年,由于短信验证具有操作简单、时效性强等优点,各类应用对短信的应用也越来越普遍,登录可以用短信验证码、付款可以用短信验证码、找回密码也可以用短信验证码……如果验证码短信应用不当,很有可能被不法分子利用,引起短信轰炸、短信诈骗等不法行为;同时,也将为公司或个人造成金钱损失。

接下来,我将以我在S项目做过的一个短信防刷机制为例,说说设计模式的实际应用。

设计思路

首先,我们需要一个发送短信的校验器,在用户请求短信时,校验用户的行为是否符合业务逻辑(比如:需要通过图形验证码校验、一个手机号一天最多发送N条短信、一个手机号发送短信时间间隔为S秒等),当用户行为符合业务逻辑时,发送验证码,否则,不发送。

+设计模式

在S项目中,由于发送短信的位置有5、6个,而且每个发送短信的业务代码还不太一样,所以,如果需要使用短信验证的校验器,需要在每个发送短信的位置添加这些校验器;而且,随着时间的推移,校验器的数量有可能增加(比如:时间间隔校验器)。

我们可以发现分校验器可以合并到一个总校验器里面,用各个校验器的结果,得到总校验器的结果,只把总校验器暴露给发送短信功能。所以这里我们可以使用外观模式


不难看出这些校验器都可以抽象为入参含有手机号,出参为校验成功或失败的方法,只是在发送短信的时候,使用总校验器,在总校验器里面使用分校验器。我们可以抽象出一个校验接口,总校验器和各分校验器实现这个接口,在不同的地方使用不同的实现,使用策略模式

在发送短信的位置,注入总校验器;在总校验器里面,注入各个分校验器。

 

S项目直接使用 “&&” 计算总校验结果。


在S项目的校验器业务逻辑中,我发现在几个校验器中都用到了同一段逻辑“L”:

1、获取缓存中的次数 
2、如果缓存中没有次数,设置为1 
3、如果缓存中有次数,自增1

如果每个校验器中都写一段,那么将会造成代码冗余。这里我把这段方法放到了实现校验接口抽象类的方法中,然后各个校验器继承这个抽象方法,就可以在需要逻辑“L”的地方直接使用父类的代码,使用模板模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值