1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title></title>
  5. </head>
  6. <body>
  7. <script>
  8. var varlidator;
  9. varlidator = {
  10. validate: function(value, type){
  11. var value = value;
  12. var type = type;
  13. switch(type){
  14. case 'isnonEmpty' : {
  15. //..yuju
  16. return true;
  17. }
  18. case 'isNumber' : {
  19. //..yuju
  20. return true;
  21. }
  22. case 'isAlphaNum' : {
  23. //..yuju
  24. return true;
  25. }
  26. default :{
  27. return 'someting'
  28. }
  29. }
  30. }
  31. };
  32. alert(validator.validate('123','isNonEmpty')) ; //有点像命令行模式;
  33.  
  34. var validator = {
  35. types : {},
  36. messages : [],
  37. config : {},
  38. validate : function(data){
  39. var i, msg , type, checker, result_ok;
  40. this.messages = [];
  41. for(var i in data){
  42. if(data.hasOwnProperty(i)){
  43. type = this.config[i];
  44. checker = this.types[type];
  45.  
  46. if(!type){
  47. continue;
  48. };
  49. if(!checker){
  50. throw{
  51. name : 'ValidationError',
  52. message : 'no handler to validate type '+ type
  53. }
  54. };
  55.  
  56. result_ok = checker.validate(data[i]);
  57. if( !result_ok ){
  58. msg = 'wrong' + checker.instructions;
  59. this.message.push( msg );
  60. }
  61. }
  62. };
  63. return this.hasErrors();
  64. },
  65. hasErrors : function(){
  66. return this.message.length !== 0
  67. }
  68. };
  69.  
  70. validator.types.inNonEmpty = {
  71. validate : function(value){
  72. return value !== '';
  73. },
  74. instructions : 'value can“t be null'
  75. };
  76. validator.types.isNumber = {
  77. validate : function(value){
  78. return !isNaN( value )
  79. },
  80. instructions : '必须是数字哦'
  81. };
  82. validator.types.isAlphaNum = {
  83. validator : function(value){
  84. return !/[^a-z0-9]/i,test(value);
  85. },
  86. instructions : '必须是数字哦'
  87. };
  88.  
  89. var data = {
  90. first_name : 'xx',
  91. last_name : '00',
  92. age : 26,
  93. username : 'qihao'
  94. };
  95. validator.config = {
  96. first_name : 'isNumber',
  97. age : 'isNonEmpty',
  98. username : 'isAplhaNum'
  99. };
  100. validator.validate( data );
  101. validator.hasErrors();
  102. </script>
  103. </body>
  104. </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. jemter的使用(三)

    前面的文章已经把接口请求.响应等前序工作做好,那么如何施加压力呢,看下面 1.点击线程组,设置线程属性,其中:线程数即并发用户数,ramp-up period是多长时间初始化上面的并发用户数,循环次数 ...

  2. c++实现排序(简单插入,希尔,选择,快速,冒泡,堆排)

    简单插入排序 适用于记录较少且基本有序的记录.算法思想:给定一个存在分界线的序列,分界线左边有序,右边无序,依次将右边的没排序的数与左边序列进行比较,插入相应位置,再对分界线做出相应调整,下面用图来说 ...

  3. hdu-5929 Basic Data Structure(双端队列+模拟)

    题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  4. python中property干什么用的?

    先来段官方文档压压惊.. property(fget=None, fset=None, fdel=None, doc=None) Return a property attribute. fget i ...

  5. 2014 Super Training #8 C An Easy Game --DP

    原题:ZOJ 3791 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3791 题意:给定两个0-1序列s1, s2,操作t ...

  6. Dijkstra求最短路径

    单源点的最短路径问题:给定带权有向图G和源点V,求从V到G中其余各顶点的最短路径 Dijkstra算法描述如下: (1)用带权的邻接矩阵arcs表示有向图,arcs[i][j]表示弧<vi,vj ...

  7. 纯js和纯css+html制作的手风琴的效果

    一:纯css+html的手风琴效果 这种用css写的手风琴比较简单,主要是应用到css中的,transition属性. 代码如下: <!DOCTYPE HTML> <html> ...

  8. f2fs解析(八)node 管理器中的node_info

    free_info 功成身退,node_info顺利接班. // 这里还是蛮复杂的一件事,如果不搞清除的话,这个历史性的接班工作我们就接不上 上面说到 alloc_nid 和 alloc_nid_do ...

  9. [转]TortoiseSVN文件夹及文件图标不显示解决方法

    FROM : http://blog.csdn.net/lishehe/article/details/8257545 由于自己的电脑是win7(64位)的,系统安装TortoiseSVN之后,其他的 ...

  10. C语言 文件操作4--文件结构体FILE的理解以及缓冲区再讲

    //文件结构体FILE的理解以及缓冲区再讲 #include<stdio.h> #include<stdlib.h> //要点:文件结构 //struct _iobuf { / ...