今天和大家聊一聊,如何合理的将多种设计模式放到同一个业务场景中
最近接到一个认证的需求,C 端用户在购买公司保险时,需要先进行 实名认证确认身份
为了保证 业务复用,单独将认证的逻辑拆分为微服务模块
C 端用户下单购买保险的逻辑大致如下
先说下关于认证相关的一些基本知识。简单来说,你如何证明你是你自己
一些云服务厂商都会有关于验证身份的付费接口,接下来我们就以腾讯云姓名、身份证二要素认证为参考进行举例
说完认证知识,我们再来拆解下用户购买保险的步骤
在整个块认证流程中,我们会讲解三种设计模式,按照顺序分别是策略、责任链、模板模式
定义一组算法类,将每个算法分别封装起来,让它们可以互相替换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化,客户端代指使用算法的代码
我们拿认证来说,定义一个认证接口,然后实现二、三、四要素以及人脸识别实现;将这些实现类放到一个 Map 容器中,并和业务规定好对应的标识 Key,通过标识 Key 获取对应的认证策略实现
如果真的像上面这么简单,if-else 判断加上拆解几个认证函数就可以搞得定,还真的不一定需要策略模式
我们再延伸来看一种复杂场景:假设后续不满足于腾讯云的认证,为了保证可用性以及更多的流量,需要对接更多的认证平台
可用性:平台的接口不太可能保证全年百分百可用,需要有容灾降级或者替换方案
更多的流量:腾讯云认证接口限流 100次 / S
这个时候策略模式的优点就体现出来了,简化代码的复杂性 以及 保证开闭原则,增加程序的健壮性以及可扩展性
后续再增加三方认证平台和认证方式,都不需要改动原有逻辑,添加对应实现即可
在责任链模式中,多个处理器(参照拦截器)依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条,链条上的每个处理器 各自承担各自的处理职责
这里主要将责任链模式应用于,规避无意义调用三方认证服务
我们可以将处理器尽量职责单一,方便后续其它认证方式的 复用和编排
模板方法模式在一个方法中定义一个 算法骨架,并将某些步骤推迟到 子类中实现。模板方法模式可以让子类在 不改变算法整体结构的情况下,重新定义算法中的某些步骤
模版方法主要作用:复用性 和 扩展性
通俗来讲 : 定义一个抽象类 AbstractTemplate
,并定义一个或若干抽象方法 abstractMethod
。代码大致如下:
public abstract class AbstractAuthenticationService<T extends AuthenticationRequest> {
void before(T request) {
}
void after(T request) {
}
// 抽象方法
protected abstract void practicalExecute(T request);
public void authentication(T request) {
// 前置拦截操作,包括不限于责任链模式调用
before(request);
// 策略模式实现,调用具体认证类,比如二要素认证或三要素认证
practicalExecute(request);
// 资源清理或记录认证完成信息
after(request);
}
腾讯云二要素认证实现类,代码如下:
@Slf4j
@Component
@RequiredArgsConstructor
// BaseAuthenticationStrategy 是策略模式实现,定义了 mark、execute 方法
public class NameIdCardAuthenticationByTencentResolver extends AbstractAuthenticationService<NameIdCardAuthenticationReqDTO>
implements BaseAuthenticationStrategy<NameIdCardAuthenticationReqDTO> {
private static final String SUCCESS = "0";
// 责任链容器
private final NameIdCardHandlerChain nameIdCardHandlerChain;
@Override
public String mark() {
return AuthenticationEnum.TENCENT.name();
}
@Override
public void execute(NameIdCardAuthenticationReqDTO request) {
authentication(request);
}
@Override
public void before(NameIdCardAuthenticationReqDTO request) {
// 责任链调用
nameIdCardHandlerChain.doFilter(request);
}
@Override
public void practicalExecute(NameIdCardAuthenticationReqDTO request) {
// 腾讯云二要素认证具体行为
}
}
抛出一个老生常谈的问题,学习设计模式有什么作用?
设计模式主要是为了应对 代码的复杂性,让其满足 开闭原则,提高代码的 扩展性;合适的场景合理运用的设计模式,可以帮助代码实现 高内聚、低耦合 等的优点
你无法决定别人的代码,但你可以决定自己的。时间充足的情况下,尽量以重构的方式去写每一行代码
因为篇幅问题,没有大张旗鼓讲设计模式本身,提供大家一个学习链接:https://github.com/acmenlt/framework
最后希望小伙伴读过文章后有所收获,祝好。
本文由哈喽比特于3年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/-pRQJsDGDo2A_-GT1Ne8Ug
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。