南山住房和建设局网站官网,做车贷的网站,微博秀 wordpress,青岛室内设计公司排名#x1f680; 作者简介#xff1a;程序员小豪#xff0c;全栈工程师#xff0c;热爱编程#xff0c;曾就职于蔚来、腾讯#xff0c;现就职于某互联网大厂#xff0c;技术栈#xff1a;Vue、React、Python、Java #x1f388; 本文收录于小豪的前端系列专栏#xff0c… 作者简介程序员小豪全栈工程师热爱编程曾就职于蔚来、腾讯现就职于某互联网大厂技术栈Vue、React、Python、Java 本文收录于小豪的前端系列专栏后续还会更新前端入门以及前端面试的一些相关文章手把手带你从零学习前端到面试找工作并如果有想进入前端领域工作的同学这个前端专栏会对你有所帮助欢迎关注起来呀 本人也会持续的去关注AIGC以及鸿蒙的一些动向并总结到博客中大家感兴趣的可以关注一下我的人工智能专栏 云原生的入门学习系列大家有兴趣的可以看一看 目录 引言策略模式是什么实现不使用策略模式使用策略模式 优点结语 引言
最近啊 有一款新游戏非常火叫幻兽帕鲁玩家呢可以在这个游戏里用精灵球捕捉帕鲁捕捉到帕鲁后可以让帕鲁帮你干活赚钱帕鲁生病你就可以卖掉这批帕鲁换下一批帕鲁干活正所谓晚上玩帕鲁白天当帕鲁(加入一个电视频道坏了的视频)由于这个游戏的爆火所以在网上的各个平台都有人去出售这款游戏小豪有个朋友呢也去网上某个平台购买这个游戏在购买时需要涉及支付嘛这个平台给的渠道有微信支付、支付宝支付、抖音支付、paypal支付以及银行支付等等小豪作为一个程序员嘛就会开始思考这种多渠道支付场景会如何设计其中我认为这里面一定会涉及的设计模式就是策略模式。 策略模式是什么
策略模式Strategy Pattern是一种软件设计模式它允许在运行时根据需要选择算法或行为。策略模式通常涉及定义一系列算法并将它们封装在单独的类中使得这些算法可以互相替换。 这样讲可能大家会有点懵秉承着talk is cheapshow me the code的原则我直接用代码讲解一下吧。
实现
不使用策略模式
下面这段这段代码就是我不使用策略模式对上述多渠道支付场景的实现我们可以看到每一个支付渠道就要在pay方法中加一个if else每一个if条件里去对每一个支付场景进行具体实现但是这样实现起来整个代码看起来不够清晰整洁也不遵守设计模式的开闭原则业务复杂度上去后代码不好维护不好拓展。
const pay (type) {if(type wx) {wx.pay()} else if(type ali) {ali.pay()} else if(type douyin) {douyin.pay()} else if(type paypal) {paypal.pay() } else if(type xxx) {xxx.pay}
}使用策略模式
这是我们使用策略模式对上述多渠道支付场景的实现首先实现了一个Strategy策略类这个策略类里会初始化一个strategies策略对象用于不同策略映射不同行为addStrategy方法用于添加新策略pay方法用于执行策略. 下面这里讲每一种支付渠道单独封装成了一个方法用addStrategy方法添加支付渠道与支付渠道行为方法的映射下面这里执行微信支付会去strategies取出微信支付对应的行为并执行.
class Strategy {constructor() {this.strategies {}}addStrategy(type, func) {this.strategies[type] func}pay(type,params) {return this.strategies[type](params)}
}const payStrategy new Strategy()const wxPay (appid) {wx.authorize()wx.pay(appid)
}const aliPay (appid) {ali.authorize()ali.pay(appid)
}const douyinPay (appid) {douyin.authorize()douyin.pay(appid)
}const paypalPay (appid) {paypal.authorize()paypal.pay(appid)
}const xxxPay (appid) {xxx.authorize()xxx.pay(appid)
}payStrategy.addStrategy(wx, wxPay)
payStrategy.addStrategy(ali, aliPay)
payStrategy.addStrategy(douyin, douyinPay)
payStrategy.addStrategy(paypal, paypalPay)
payStrategy.addStrategy(xxx, xxxPay)payStrategy.pay(wx, testAppid)
优点
通过上面两段代码的对比我们可以总结出策略模式具有以下优点
分离算法策略模式将算法的定义与使用分离开来使得每个算法可以独立变化易于维护和扩展。避免使用条件语句策略模式可以避免使用大量的条件语句使代码更加清晰、简洁。符合开闭原则新增加算法时不需要修改已有的代码只需添加新的策略即可。提高代码复用性策略模式将相同的行为封装在不同的策略中使得这些行为可以被多个上下文共享和复用。
结语
各位看官老爷们好小豪已经建立了技术交流群如果你很感兴趣可以私信我加入我的社群。
社群中不定时会有很多活动例如学习资料分享、大厂面经分享、技术讨论、行业大佬创业杂谈等等。
本人目前是在互联网大厂正式工作也有过多个大厂的工作经历加入社群也会有简历修改辅导模拟面试手把手项目实战教学大厂工作内推机会以及大厂面试题解析分享等福利。
社群方向很多相关领域有Web全栈前后端、人工智能、AIGC、自媒体变现、前沿科技文章分享、论文精读等等。
不管你是多新手的小白都欢迎你加入社群中讨论、聊天、分享加速助力你成为下一个技术大佬也随时欢迎您跟我沟通一起交流一起成长。变现、进步、技术、资料、项目、你想要的这里都会有
网络的风口只会越来越大风浪越大鱼越贵欢迎您加入社群~一个人可以或许可以走的很快但一群人将走的更远
想都是问题做都是答案行动起来吧欢迎评论区or后台与我沟通交流也欢迎您扫描下方二维码直接加入到我的交流社群(微信adcoderhao)