在网上找了不少入门实例,依旧认为还是张容铭小哥给的情景最为适合,他的情境是这样的:
项目经理过来说,咱马上要过圣诞节啦,得打折清仓呀,有的商品5折,有的7折,有的9折~
作为菜鸟的我🤔:

就这么尴尬的一个一个function垒起来~(在下刚入行的时候还真是这么写的😅~)。这时项目经理又来了,圣诞都打折了,元旦也表示一下儿呗,咱们来个满减吧~vip能满100减50,普通用户满100减30...

哪儿说理去,这需求说加就加,项目说改就改,没辙,谁让人家能带着我挣钱呢。不过我依旧固执的认为一个优秀的开发,是能够通过自己的代码设计来承受住需求业务的各种变化的~所以在下经过了一番修炼之后,将策略模式融合了进去,把代码美化了一番。

现在照着张小哥的小白书把代码改好了,如果各位客爷了解状态模式或者看过在下的另一篇介绍状态模式的博文的话,一定会对这个结构有点眼熟的,其实他也是由两个部分组成,分别是“策略类”和“环境类(环境方法)”。
上面这个例子中:
策略类是指strategy对象,他可以保存所有的策略名对应的算法。
环境类是用来调用传入要调用的策略名称和需要的参数,这个调用函数的地方我把书中的原文做了一点修改,原文中是在调用的时候只传了price作为参数

但这也既定了环境类只能摄入一个price价格参数,如果从设计的拓展性来考虑的话,未来的策略算法可能需要更多参数,所以在下建议使用apply来调用方法,将需要的参数使用args传入,之后再使用策略的话就不需要限定传入参数个数。

这样当我们再去由于某种原因去使用策略中的算法时,we can

看到这里策略模式的核心内容就讲完了,记得在下在记录状态模式的时候留下了一个问题,状态模式与策略模式有什么区别,各自的使用场景在哪里?🔽
状态模式是封装了一个对象的不同状态,这些状态都是供自己的对象所使用的,状态模式复用性很小,基本没有返回值都在自己内部方法中消化了~个人愚见更偏向于编写一些动画游戏中精灵的行为状态。
策略模式是封装了一个充满各种算法的对象,这些算法可以供各种对象使用,可以供给给任何条件判断。只要coder将策略名称和所需参数传入策略模式,就可以根据策略模式中封装的算法得出答案,代码中复用性很高~个人愚见当一个项目需要大量算法,大量匹配模式的时候,例如充满各种正则表达式的表单验证,实为上选。
策略模式是将大量的算法集合起来,对外暴露出算法的使用方式,将算法的使用与它的内部实现分离开,类似一个黑盒,同样减少了 if else 语句
——高级装逼工程师 Yubble
到此为止策略模式的核心思想已经全部交代完毕了,其实在阅读这篇实例的时候我就在想,把商品一个个用if else判断是不是太低效了。如下:

代码写成这样估计各位客爷也饶不了在下,容在下梳理一下思路🤔。宾狗~这里可以写一个js文件来存各种商品的字典表嘛~比如这样:

将每种货品的属性值都记录在一个js字典表中,在点击货品的时候和字典表中记录的货品信息比对,便可快速定位需要使用的策略。我能想到的方案还有集合,不过每次都要便利的话时间复杂度会变高汪。

说到设计模式又不得不提js的数据结构和算法,小可认为两者相辅相成绝对是进阶高程的两大利器。
来源:https://www.cnblogs.com/plBlog/p/12365360.html