TAT.svenzeng 【Javascript 设计模式 9】-策略模式
In 未分类 on 2012年10月24日 by view: 14,812
12

策略模式的意义是定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
一个小例子就能让我们一目了然。
回忆下 jquery 里的 animate 方法.

这 2 句代码都是让 div 在 1000ms 内往右移动 200 个像素. linear(匀速) 和 cubic(三次方缓动) 就是一种策略模式的封装.
再来一个例子. 上半年我写的 dev.qplus.com, 很多页面都会有个即时验证的表单. 表单的每个成员都会有一些不同的验证规则.

比如姓名框里面, 需要验证非空,敏感词,字符过长这几种情况。 当然是可以写 3 个 if else 来解决,不过这样写代码的扩展性和维护性可想而知。如果表单里面的元素多一点,需要校验的情况多一点,加起来写上百个 if else 也不是没有可能。
所以更好的做法是把每种验证规则都用策略模式单独的封装起来。需要哪种验证的时候只需要提供这个策略的名字。就像这样:

可以看到,各种验证规则很容易被修改和相互替换。如果某天产品经理建议字符过长的限制改成 60 个字符。那只需要 0.5 秒完成这次工作。

[目录]

原创文章转载请注明:

转载自AlloyTeam:http://www.alloyteam.com/2012/10/commonly-javascript-design-patterns-strategy-mode/

  1. xx 2014 年 4 月 10 日

    这种也好意思叫设计模式,说不清楚,道不明白,不要误人子弟

  2. 【Javascript设计模式14】-备忘录模式 | Tencent AlloyTeam 2012 年 10 月 25 日

    […] 策略模式 […]

    • Mahala 2012 年 11 月 12 日

      I read your post and wshied I’d written it

发表评论到 【Javascript设计模式12】-迭代器模式 | Tencent AlloyTeam