javascript设计模式-策略模式
策略模式笔记
将定义的一组算法封装起来,使其相互之间可以替换。
封装的算法具有一定独立性,不会随客户端变化而变化。
与状态模式异同?
1. 结构上看,它与状态模式很像,也是在内部封装一个对象,然后通过返回的接口对象实现对内部对象的调用
2. 不同点是,策略模式不需要管理状态,状态之间没有依赖关系、策略之间可以相互替换、策略对象内部保存的是相互独立的一些算法。
demo:价格策略对象 、 表单正则验证策略对象
demo1:价格策略对象
//价格策略对象
var PriceStrategy = function(){
//内部算法对象
var strategy = {
//100 返 30
return30 : function(price){
return +price + parseInt(price / 100) * 30;
},
//100 返 50
return50 : function(price){
return +price + parseInt(price / 100) * 50;
},
//9折
percent90 : function(price){
return price * 100 * 90 / 10000;
},
//8折
percent80 : function(price){
return price * 100 * 80 / 10000;
},
//5折
percent50 : function(price){
return price * 100 * 50 / 10000;
}
}
return function(algorithm,price){
//如果算法存在,则调用算法,否则返回false
return strategy[algorithm] && strategy[algorithm](price);
}
}();
测试代码
1 var price = PriceStrategy('return50','300');
console.log(price);
控制台显示
demo2: 表单正则验证策略对象
//表单正则验证策略对象
var InputStrategy = function(){
var strategy = {
//是否为空
notNull : function(value){
return /\s+/.test(value) ? '请输入内容' : '';
},
//是否是一个数字
number : function(value){
return /^[0-9]+(\.[0-9]+)?$/.test(value) ? '' : '请输入数字';
},
//是否是本地电话
phone : function(value){
return /^\d{3}\-\d{8}$|^\d{4}\-\d{7}$/.test(value) ? '' : '请输入正确的电话号码格式,如:010-12345678 或 0418-1234567';
}
}
return {
//验证接口 type算法 value 表单值
check : function(type, value){
//去除收尾空白符
value =value.replace(/^\s+|\s+$/g, '');
return strategy[type] ? strategy[type](value) : '没有该类型的检测方法'
},
//添加策略
addStrategy : function(type, fn){
strategy[type] = fn;
}
}
}();
拓展策略 添加策略
InputStrategy.addStrategy('nickname', function(value){
return /^[a-zA-Z]\w{3-7}$/.test(value) ? '' : '请输入4-8位昵称,如:YYQH';
});
测试代码
console.log(InputStrategy.check('nickname',"1YQH"));
控制台显示
javascript设计模式-策略模式的更多相关文章
- javascript 设计模式-----策略模式
在<javascript设计模式>中,作者并没有向我们介绍策略模式,然而它却是一种在开发中十分常见的设计模式.最常见的就是当我们遇到一个复杂的表单验证的时候,常常需要编写一大段的if和el ...
- javascript设计模式——策略模式
前面的话 在程序设计中,常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法.这些算法灵活多样,而且可以随意互相替换.这种解决方 ...
- JavaScript设计模式 - 策略模式(表单验证)
表单提交的时候,总是要校验,不同的表单可能校验相同的功能. 为了避免代码重复的复制黏贴,使用策略模式,写出来的代码赏心悦目,且可扩展,还可以作为插件到处使用 <!DOCTYPE html> ...
- JavaScript实现策略模式
在开篇之前先分享今天看到的一句关于设计模式的话:将不变的部分和变化的部分隔开是每个设计模式的主题 请大家自行感受这句话的精髓所在,并且思考学习设计模式究竟能给我们编程带来什么样的东西,欢迎大家在文章下 ...
- JS设计模式——策略模式
设计模式高大上,业务代码用不上...平时用不上我们就可以忽略了吗? 非也,就像面试造火箭,工作拧螺丝一样.万一我们公司哪天要造火箭了,你得立马能上手. 同时,有些复杂的业务代码也可以用设计模式的思想去 ...
- 15. 星际争霸之php设计模式--策略模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- [.net 面向对象程序设计深入](24)实战设计模式——策略模式(行为型)
[.net 面向对象程序设计深入](24)实战设计模式——策略模式(行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它 ...
- linkin大话设计模式--策略模式
linkin大话设计模式--策略模式 Strategy [ˈstrætədʒi] 策略 策略模式用于封装系列的算法,这些算法通常被封装在一个称为Context的类中,客户端程序可以自由的选择任何一种 ...
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
[.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模 ...
随机推荐
- js 中类似时钟的显示
先上代码 <!DOCTYPE html> <html> <head> <script> function startTime() { var today ...
- 相克军_Oracle体系_随堂笔记011-事物
数据库主要实现的功能无非是以下三点: ①数据的一致性, ②数据的安全, ③数据的优化. 事物主要影响数据的一致性. 1.事务的基本概念 一组DML语句 insert.delete.up ...
- SwitchButton 开关按钮 的多种实现方式
刚开始接触开关样式的按钮是在IOS系统上面,它的切换以及滑动十分帅气,深入人心. 所谓的开关按钮,就是只有2个状态:on和off,下图就是系统IOS 7上开关按钮效果. 起初我在android上我只会 ...
- ThinkPHP中的快捷函数小结
U() 制作url地址的快捷函数 C(名称) 获得配置变量(convertion.php config.php)信息C(名称,值) 设置配置变量信息 L() 获得语言变量信息E() 给页面输出错误信息 ...
- Jquery.Qrcode在客户端动态生成二维码并添加自定义Logo
0 Jquery.Qrcode简介 Jquery.Qrcode.js是一个在浏览器端基于Jquery动态生成二维码的插件,支持Canvas和Table两种渲染方式,它的优点是在客户端动态生成,减轻了服 ...
- 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询
前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[ ...
- hotcss用法
1.0 GitHub下载地址: https://github.com/imochen/hotcss 或者我的百度网盘:http://pan.baidu.com/s/1pKlLqHX 使用方法看demo ...
- Matches正则使用提取内容
用VS新建WinForm程序,窗体上是三个文本框和一个按钮.可以自己构造正则表达式,自己修改匹配内容 正则表达是要提取的部分为hewenqitext 代码如下: using System; using ...
- C#+ArcEngine10.0+SP5实现鼠标移动动态显示要素属性信息
为了解决鼠标移过动态显示要素属性的问题,我在网上先是查到的只能显示单个要素的属性,就是直接在arcmap中设置好的那个tips就可以显示,但是这种显示效果只是简单的实现了显示要素的属性值,可是没有对该 ...
- 深入理解http/https协议
深入理解HTTP协议(转) http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(Wo ...