JS模式:策略模式,感觉就是一个闭包存储信息,然后是加一些验证方法--还看了老半天
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script>
var varlidator;
varlidator = {
validate: function(value, type){
var value = value;
var type = type;
switch(type){
case 'isnonEmpty' : {
//..yuju
return true;
}
case 'isNumber' : {
//..yuju
return true;
}
case 'isAlphaNum' : {
//..yuju
return true;
}
default :{
return 'someting'
}
}
}
};
alert(validator.validate('123','isNonEmpty')) ; //有点像命令行模式; var validator = {
types : {},
messages : [],
config : {},
validate : function(data){
var i, msg , type, checker, result_ok;
this.messages = [];
for(var i in data){
if(data.hasOwnProperty(i)){
type = this.config[i];
checker = this.types[type]; if(!type){
continue;
};
if(!checker){
throw{
name : 'ValidationError',
message : 'no handler to validate type '+ type
}
}; result_ok = checker.validate(data[i]);
if( !result_ok ){
msg = 'wrong' + checker.instructions;
this.message.push( msg );
}
}
};
return this.hasErrors();
},
hasErrors : function(){
return this.message.length !== 0
}
}; validator.types.inNonEmpty = {
validate : function(value){
return value !== '';
},
instructions : 'value can“t be null'
};
validator.types.isNumber = {
validate : function(value){
return !isNaN( value )
},
instructions : '必须是数字哦'
};
validator.types.isAlphaNum = {
validator : function(value){
return !/[^a-z0-9]/i,test(value);
},
instructions : '必须是数字哦'
}; var data = {
first_name : 'xx',
last_name : '00',
age : 26,
username : 'qihao'
};
validator.config = {
first_name : 'isNumber',
age : 'isNonEmpty',
username : 'isAplhaNum'
};
validator.validate( data );
validator.hasErrors();
</script>
</body>
</html>
JS模式:策略模式,感觉就是一个闭包存储信息,然后是加一些验证方法--还看了老半天的更多相关文章
- 3.js模式-策略模式
1. 策略模式 策略模式定义一系列的算法,把它们封装起来,并且可以互相替换. var strategies = { isNonEmpty: function(value,errMsg){ if(val ...
- 命令模式 & 策略模式 & 模板方法
一.策略模式 策略模式:封装易变化的算法,可互相替换. GoF<设计模式>中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换.该模式使得算法可独立于它们的客户变化. 比如 ...
- 工厂模式&策略模式。
抽象.封装,具体事情做得越多,越容易犯错误.这每个做过具体工作的人都深有体会,相反,官做得越高,说出的话越抽象越笼统,犯错误可能性就越少.好象我们从编程序中也能悟出人生道理.(百度百科) 不断抽象封装 ...
- 简单工厂模式&策略模式-简介与区别
不得不说,这两种模式真的很像. 相似点:都用到了面向对象的继承.多态.抽象,都拥有相似的结构. 不同点:工厂模式仅提供具体的实例对象,怎么使用这个对象是client的自由,策略模式client可以通过 ...
- js 设计模式——策略模式
策略模式(Strategy) 定义:将定义的一组算法封装起来,使其相互之间可以替换.封装的算法具有一定的独立性,不会随客户端的变化而变化 废话不多说,先来个例子 // 例如要写一个计算两个数加减乘除的 ...
- [转]js设计模式-策略模式
在程序设计中,常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法.这些算法灵活多样,而且可以随意互相替换.这种解决方案就是本文 ...
- JS设计模式——策略模式
设计模式高大上,业务代码用不上...平时用不上我们就可以忽略了吗? 非也,就像面试造火箭,工作拧螺丝一样.万一我们公司哪天要造火箭了,你得立马能上手. 同时,有些复杂的业务代码也可以用设计模式的思想去 ...
- js设计模式--策略模式
策略模式: 定义了一系列的算法,把他们封装起来,是它们之间可以互相替换,此模式不会影响到使用算法的客户. 回忆下jquery里的animate方法: $( div ).animate( {" ...
- java设计模式--行为型模式--策略模式
策略模式: 策略模式 概述 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化. 适用性 1.许多相关的类仅仅是行为有异.“策略”提供了一种用多个行 ...
随机推荐
- 《TCP/IP详解 卷一》读书笔记-----TCP连接建立
1.在每个TCP报文段中,头部的flag字段里的SYN,FIN,RST,PSH可以多个有效,并没有限定为必须只有一个 2.TCP连接建立过程: 1)客户端发送一个SYN报文段,其中包含了客户端要传送的 ...
- 【Android Demo】获取指定网页的页面源代码
1.直接上效果图 2.代码 主要就是工具类HtmlService.java: import java.io.ByteArrayOutputStream; import java.io.InputStr ...
- 循环队列+堆优化dijkstra最短路 BZOJ 4152: [AMPPZ2014]The Captain
循环队列基础知识 1.循环队列需要几个参数来确定 循环队列需要2个参数,front和rear 2.循环队列各个参数的含义 (1)队列初始化时,front和rear值都为零: (2)当队列不为空时,fr ...
- 创建租房网House脚本
USE MASTER GO EXEC XP_CMDSHELL 'MKDIR E:\HOUSE1' GO SET NOCOUNT ON----不显示影响行数 IF EXISTS(SELECT * FRO ...
- Redis集群知识解析
redis集群在启动的时候就自动在多个节点间分好片.同时提供了分片之间的可用性:当一部分redis节点故障或网络中断,集群也能继续工作.但是,当大面积的节点故障或网络中断(比如大部分的主节点都不可用了 ...
- Gvim使用
VIM删除空白行 命令:g/^\s*$/d :g 代表在全文档范围内 ^代表行的开始 \s*代表空白字符 &代表行的结束 d代表删除 用//将3段代码隔开
- 给 IIS Express 配置虚拟目录
使用 vs2015 打开旧项目,之前使用 iis 配置站点,然后在 vs 中附加 w3wp.exe 进行开发和调试的. 由于种种原因 iis 上配置站点各种失败. 之后发现,其实在 vs2015 中按 ...
- java读取文件批量插入记录
只是一个例子,方便以后查阅. import ey.db.oracle.OracleHelper; import ey.db.type.*; import java.io.BufferedReader; ...
- C语言 动态库简单开发
动态库项目 //简单的动态库开发----报文发送 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib. ...
- C语言 预处理三(条件编译--#if)
//#if 条件编译 //一般用于产品各个版本的语言包 #include<stdio.h> #include<stdlib.h> //#都是预处理指令,条件表达式必须在预处理里 ...