<!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模式:策略模式,感觉就是一个闭包存储信息,然后是加一些验证方法--还看了老半天的更多相关文章

  1. 3.js模式-策略模式

    1. 策略模式 策略模式定义一系列的算法,把它们封装起来,并且可以互相替换. var strategies = { isNonEmpty: function(value,errMsg){ if(val ...

  2. 命令模式 & 策略模式 & 模板方法

    一.策略模式 策略模式:封装易变化的算法,可互相替换. GoF<设计模式>中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换.该模式使得算法可独立于它们的客户变化. 比如 ...

  3. 工厂模式&策略模式。

    抽象.封装,具体事情做得越多,越容易犯错误.这每个做过具体工作的人都深有体会,相反,官做得越高,说出的话越抽象越笼统,犯错误可能性就越少.好象我们从编程序中也能悟出人生道理.(百度百科) 不断抽象封装 ...

  4. 简单工厂模式&策略模式-简介与区别

    不得不说,这两种模式真的很像. 相似点:都用到了面向对象的继承.多态.抽象,都拥有相似的结构. 不同点:工厂模式仅提供具体的实例对象,怎么使用这个对象是client的自由,策略模式client可以通过 ...

  5. js 设计模式——策略模式

    策略模式(Strategy) 定义:将定义的一组算法封装起来,使其相互之间可以替换.封装的算法具有一定的独立性,不会随客户端的变化而变化 废话不多说,先来个例子 // 例如要写一个计算两个数加减乘除的 ...

  6. [转]js设计模式-策略模式

    在程序设计中,常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法.这些算法灵活多样,而且可以随意互相替换.这种解决方案就是本文 ...

  7. JS设计模式——策略模式

    设计模式高大上,业务代码用不上...平时用不上我们就可以忽略了吗? 非也,就像面试造火箭,工作拧螺丝一样.万一我们公司哪天要造火箭了,你得立马能上手. 同时,有些复杂的业务代码也可以用设计模式的思想去 ...

  8. js设计模式--策略模式

    策略模式: 定义了一系列的算法,把他们封装起来,是它们之间可以互相替换,此模式不会影响到使用算法的客户. 回忆下jquery里的animate方法: $( div ).animate( {" ...

  9. java设计模式--行为型模式--策略模式

    策略模式: 策略模式 概述 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化. 适用性 1.许多相关的类仅仅是行为有异.“策略”提供了一种用多个行 ...

随机推荐

  1. 二分法 codevs 1432 总数统计

    codevs 1432 总数统计  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 给出n个数,统计两两之和小于k的方 ...

  2. 该怎样提高ZBrush的创作效率

     ZBrush是一款数字雕刻和绘画软件,以强大的功能和直观的工作流程改变了整个三维行业,相信使用ZBrush的人都希望加快雕刻速度提高ZBrush技能,很多雕刻专家也都试图证明加快雕刻速度是否真的能提 ...

  3. 这一路走来,冷暖自知 (附算法demos)

    最近半年多,除了“一键修图”算法之外我还做了其他什么算法? 1.实时单图HDR算法(颜色矫正,智能曝光) 2.多图曝光融合HDR算法(最高支持八百万像素左右) 3.模拟热能探测算法 4.防伪探测算法 ...

  4. ZOJ 2301 / HDU 1199 Color the Ball 离散化+线段树区间连续最大和

    题意:给你n个球排成一行,初始都为黑色,现在给一些操作(L,R,color),给[L,R]区间内的求染上颜色color,'w'为白,'b'为黑.问最后最长的白色区间的起点和终点的位置. 解法:先离散化 ...

  5. 一道题看bitset应用 --ZOJ 3642

    题意:给n个文件,包括文件名和文件大小,然后给出k个关键词,查询包含该关键词的文件的大小总和.文件名为一些中括号括起的关键词的合集. 解法:可用bitset记录每一个关键词在哪些文件中出现,然后查询即 ...

  6. Codeforces Round #258 D Count Good Substrings --计数

    题意:由a和b构成的字符串,如果压缩后变成回文串就是Good字符串.问一个字符串有几个长度为偶数和奇数的Good字串. 分析:可知,因为只有a,b两个字母,所以压缩后肯定为..ababab..这种形式 ...

  7. HDU 1878 欧拉回路

    并查集水题. 一个图存在欧拉回路的判断条件: 无向图存在欧拉回路的充要条件 一个无向图存在欧拉回路,当且仅当该图所有顶点度数都是偶数且该图是连通图. 有向图存在欧拉回路的充要条件 一个有向图存在欧拉回 ...

  8. C++中不能声明为虚函数的有哪些函数

    常见的不不能声明为虚函数的有:普通函数(非成员函数):静态成员函数:内联成员函数:构造函数:友元函数. 1.为什么C++不支持普通函数为虚函数? 普通函数(非成员函数)只能被overload,不能被o ...

  9. 搜索服务Solr集群搭建 使用ZooKeeper作为代理层

    上篇文章搭建了zookeeper集群 那好,今天就可以搭建solr搜服服务的集群了,这个和redis 集群不同,是需要zk管理的,作为一个代理层 安装四个tomcat,修改其端口号不能冲突.8080~ ...

  10. 梳理git分支管理策略

    如果你严肃对待编程,就必定会使用"版本管理系统"(Version Control System). 眼下最流行的"版本管理系统",非Git莫属. 相比同类软件, ...