javascript设计模式-策略模式

Posted 惊涛随笔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript设计模式-策略模式相关的知识,希望对你有一定的参考价值。

策略模式笔记
   将定义的一组算法封装起来,使其相互之间可以替换。
   封装的算法具有一定独立性,不会随客户端变化而变化。
   与状态模式异同?
     1. 结构上看,它与状态模式很像,也是在内部封装一个对象,然后通过返回的接口对象实现对内部对象的调用
     2. 不同点是,策略模式不需要管理状态,状态之间没有依赖关系、策略之间可以相互替换、策略对象内部保存的是相互独立的一些算法。
   demo:价格策略对象 、 表单正则验证策略对象

demo1:价格策略对象

 1             //价格策略对象
 2             var PriceStrategy = function(){
 3                 //内部算法对象
 4                 var strategy = {
 5                     //100 返 30
 6                     return30 : function(price){
 7                         return +price + parseInt(price / 100) * 30;
 8                     },
 9                     //100 返 50
10                     return50 : function(price){
11                         return +price + parseInt(price / 100) * 50;
12                     },
13                     //9折
14                     percent90 : function(price){
15                         return price * 100 * 90 / 10000;
16                     },
17                     //8折
18                     percent80 : function(price){
19                         return price * 100 * 80 / 10000;
20                     },
21                     //5折
22                     percent50 : function(price){
23                         return price * 100 * 50 / 10000;
24                     }
25                 }
26                 return function(algorithm,price){
27                     //如果算法存在,则调用算法,否则返回false
28                     return strategy[algorithm] && strategy[algorithm](price);
29                 }
30             }();

测试代码

1             var price = PriceStrategy(\'return50\',\'300\');
2             console.log(price);

控制台显示

demo2: 表单正则验证策略对象

 1             //表单正则验证策略对象
 2             var InputStrategy = function(){
 3                 var strategy = {
 4                     //是否为空
 5                     notNull : function(value){
 6                         return /\\s+/.test(value) ? \'请输入内容\' : \'\';
 7                     },
 8                     //是否是一个数字
 9                     number : function(value){
10                         return /^[0-9]+(\\.[0-9]+)?$/.test(value) ? \'\' : \'请输入数字\';
11                     },
12                     //是否是本地电话
13                     phone : function(value){
14                         return /^\\d{3}\\-\\d{8}$|^\\d{4}\\-\\d{7}$/.test(value) ? \'\' : \'请输入正确的电话号码格式,如:010-12345678 或 0418-1234567\';
15                     }
16                 }
17                 return {
18                     //验证接口 type算法 value 表单值
19                     check : function(type, value){
20                         //去除收尾空白符
21                         value =value.replace(/^\\s+|\\s+$/g, \'\');
22                         return strategy[type] ? strategy[type](value) : \'没有该类型的检测方法\'
23                     },
24                     //添加策略
25                     addStrategy : function(type, fn){
26                         strategy[type] = fn;
27                     }
28                 }
29             }();

拓展策略 添加策略

1          InputStrategy.addStrategy(\'nickname\', function(value){
2              return /^[a-zA-Z]\\w{3-7}$/.test(value) ? \'\' : \'请输入4-8位昵称,如:YYQH\';
3          });

测试代码

1          console.log(InputStrategy.check(\'nickname\',"1YQH"));

控制台显示

以上是关于javascript设计模式-策略模式的主要内容,如果未能解决你的问题,请参考以下文章

《JavaScript设计模式与开发实践》—— 策略模式

深入理解JavaScript系列(33):设计模式之策略模式

策略模式-设计模式

javascript设计模式与开发实践阅读笔记——策略模式

JAVA SCRIPT设计模式--行为型--设计模式之Strategy策略模式(21)

JAVA SCRIPT设计模式--行为型--设计模式之Strategy策略模式(21)