js策略模式之浅谈

        今天是星期六,各位客爷有没有出门丰富一下自己的生活嘞,昨天在下做新人入职训,画了一张特别英俊的自画像,现与各位客爷分享一下在下的美貌~

        简直不要太帅了有没有,哈哈,虽然我是个coder,但是我却是个不安分的coder,我喜欢运动健身,社交棋牌游戏,户外游,电动游戏,KTV,养小动物等等~

        其实咱们今天要分享的这个知识也是一个让不同的人(对象)在享受不同的爱好(策略)的时候,会体现出不同的效果~


        在网上找了不少入门实例,依旧认为还是张容铭小哥给的情景最为适合,他的情境是这样的:

        项目经理过来说,咱马上要过圣诞节啦,得打折清仓呀,有的商品5折,有的7折,有的9折~

        作为菜鸟的我:

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

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

        现在照着张小哥的小白书把代码改好了,如果各位客爷了解状态模式或者看过在下的另一篇介绍状态模式的博文的话,一定会对这个结构有点眼熟的,其实他也是由两个部分组成,分别是“策略类”和“环境类(环境方法)”。

        上面这个例子中:

            策略类是指strategy对象,他可以保存所有的策略名对应的算法

            环境类是用来调用传入要调用的策略名称和需要的参数,这个调用函数的地方我把书中的原文做了一点修改,原文中是在调用的时候只传了price作为参数

《js设计模式》书中原文

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

在下的修改版

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

        看到这里策略模式的核心内容就讲完了,记得在下在记录状态模式的时候留下了一个问题,状态模式与策略模式有什么区别,各自的使用场景在哪里?

        状态模式是封装了一个对象的不同状态,这些状态都是供自己的对象所使用的,状态模式复用性很小,基本没有返回值都在自己内部方法中消化了~个人愚见更偏向于编写一些动画游戏中精灵的行为状态。

        策略模式是封装了一个充满各种算法的对象,这些算法可以供各种对象使用,可以供给给任何条件判断。只要coder将策略名称和所需参数传入策略模式,就可以根据策略模式中封装的算法得出答案,代码中复用性很高~个人愚见当一个项目需要大量算法,大量匹配模式的时候,例如充满各种正则表达式的表单验证,实为上选。


        策略模式是将大量的算法集合起来,对外暴露出算法的使用方式,将算法的使用与它的内部实现分离开,类似一个黑盒,同样减少了 if else 语句

                                                                                    ——高级装逼工程师 Yubble

        到此为止策略模式的核心思想已经全部交代完毕了,其实在阅读这篇实例的时候我就在想,把商品一个个用if else判断是不是太低效了。如下:

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

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

        说到设计模式又不得不提js的数据结构和算法,小可认为两者相辅相成绝对是进阶高程的两大利器。


        下面让我们来轻松一下~还记得文章开头在下的自画像吗?我们来思考一下如果有不同的需求,可以用什么设计模式来实现啊?

        第一个需求,声明一个帅小伙儿,他早上骑自行车去上班,敲了一天代码下班去健身,晚上回家还要喂龟龟。一到周末他就开启娱乐状态,去唱歌,打电动,棋牌交友...

        第二个需求,现在公司有不同社团,宠物社,健身社,棋牌社,羽毛球社,K歌社,骑行社等等,每个小伙伴都可以加入社团,但是根据每个人体力,智商,情商的不同,会在不同社团取得不同成绩...

        这两种情况分别用什么设计模式会比较好呢?

        入职一周了,上了六天班,对于我们这种高危职业一定要多增加户外运动哦,祝大家节日快乐。

你可能感兴趣的:(js策略模式之浅谈)