策略模式(学习笔记)

前端之家收集整理的这篇文章主要介绍了策略模式(学习笔记)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<table class="javascript"><tr class="li1">
<td class="ln"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
@H_403_1@</td>
<td class="de1"><pre class="de1">原文地址:http<span class="sy0">:<span class="co1">//segmentfault.com/a/1190000004294797#articleHeader0
 
<span class="kw1">var validate <span class="sy0">= <span class="br0">{<span class="br0">}<span class="sy0">;
 
<span class="co1">//判断传入的值是否正确,并给出提示  (策略模式)
validate.<span class="me1">ck <span class="sy0">= <span class="kw1">function<span class="br0">(v<span class="sy0">, type<span class="sy0">, msg<span class="br0">) <span class="br0">{
 
  <span class="co1">//闭包 封装规则
  <span class="kw1">var rules <span class="sy0">= <span class="br0">{
    <span class="st0">'?!empty'<span class="sy0">: <span class="kw1">function<span class="br0">(v<span class="br0">) <span class="br0">{
      <span class="kw1">return v <span class="sy0">!== <span class="st0">''<span class="sy0">;
    <span class="br0">}<span class="sy0">,
    <span class="st0">'?user'<span class="sy0">: <span class="kw1">function<span class="br0">(v<span class="br0">) <span class="br0">{
      <span class="kw1">return <span class="co2">/^[\w|·|。|•|.|.|(\u4e00-\u9fa5)]{2,20}$/.<span class="me1">test<span class="br0">(v<span class="br0">)<span class="sy0">;
    <span class="br0">}<span class="sy0">,
    <span class="st0">'?mobile'<span class="sy0">: <span class="kw1">function<span class="br0">(v<span class="br0">) <span class="br0">{
      <span class="kw1">return <span class="co2">/^0?1[3578]\d{9}$/.<span class="me1">test<span class="br0">(v<span class="br0">)<span class="sy0">;
    <span class="br0">}
  <span class="br0">}<span class="sy0">;
 
  <span class="kw1">return <span class="kw1">function<span class="br0">(v<span class="sy0">, msg<span class="br0">) <span class="br0">{
    <span class="kw1">var pass <span class="sy0">= rules<span class="br0">[type<span class="br0">]<span class="br0">(v<span class="br0">)<span class="sy0">;
    <span class="kw1">if <span class="br0">(<span class="sy0">!pass<span class="br0">) <span class="br0">{
      console.<span class="me1">log<span class="br0">(msg<span class="br0">)<span class="sy0">;
    <span class="br0">}
    <span class="kw1">return pass<span class="sy0">;
  <span class="br0">}
<span class="br0">}<span class="br0">(<span class="br0">)<span class="sy0">;
 
<span class="kw1">var MSG <span class="sy0">= <span class="br0">{
  <span class="st0">'u_empty'<span class="sy0">: <span class="st0">'用户名不能为空'<span class="sy0">,
  <span class="st0">'u_err'<span class="sy0">: <span class="st0">'用户名不正确'<span class="sy0">,
  <span class="st0">'m_empty'<span class="sy0">: <span class="st0">'手机号不能为空'<span class="sy0">,
  <span class="st0">'m_err'<span class="sy0">: <span class="st0">'手机号不正确'
<span class="br0">}<span class="sy0">;
 
<span class="co1">//判断传入的值是否符合一系列的规则 (代理模式)
validate.<span class="me1">cks <span class="sy0">= <span class="kw1">function<span class="br0">(v<span class="sy0">, types<span class="sy0">, msgs<span class="br0">) <span class="br0">{
  <span class="kw1">var i <span class="sy0">= <span class="nu0">0<span class="sy0">, pass<span class="sy0">, msg<span class="sy0">;
  while <span class="br0">(msg <span class="sy0">= msgs<span class="br0">[i<span class="br0">]<span class="sy0">, type <span class="sy0">= types<span class="br0">[i<span class="sy0">++<span class="br0">]<span class="br0">) <span class="br0">{
    pass <span class="sy0">= <span class="kw1">this.<span class="me1">ck<span class="br0">(v<span class="sy0">, msg<span class="br0">)<span class="sy0">;
    <span class="kw1">if <span class="br0">(<span class="sy0">!pass<span class="br0">) <span class="kw1">break<span class="sy0">;
  <span class="br0">}
  <span class="kw1">return <span class="kw1">this<span class="sy0">;
<span class="br0">}<span class="sy0">;
 
<span class="co1">//判断传入的dom对象是否符合一些列的规则 (代理模式)
validate.<span class="me1">check <span class="sy0">= <span class="kw1">function<span class="br0">(el<span class="sy0">, msgs<span class="br0">) <span class="br0">{
  <span class="kw1">if <span class="br0">(<span class="sy0">!el<span class="br0">) <span class="kw1">return <span class="kw2">false<span class="sy0">;
  <span class="kw1">this.<span class="me1">cks<span class="br0">(el.<span class="me1">value<span class="sy0">, msgs<span class="br0">)<span class="sy0">;
  <span class="kw1">return <span class="kw1">this<span class="sy0">;
<span class="br0">}<span class="sy0">;
 
<span class="kw1">var username <span class="sy0">= document.<span class="me1">getElementById<span class="br0">(<span class="st0">'username'<span class="br0">)<span class="sy0">;
<span class="kw1">var mobile <span class="sy0">= document.<span class="me1">getElementById<span class="br0">(<span class="st0">'mobile'<span class="br0">)<span class="sy0">;
 
validate.<span class="me1">check<span class="br0">(username<span class="sy0">, <span class="br0">[<span class="st0">'?!empty'<span class="sy0">, <span class="st0">'?user'<span class="br0">]<span class="sy0">, <span class="br0">[MSG.<span class="me1">u_empty<span class="sy0">, MSG.<span class="me1">u_err<span class="br0">]<span class="br0">)
      .<span class="me1">check<span class="br0">(mobile<span class="sy0">, <span class="st0">'?mobile'<span class="br0">]<span class="sy0">, <span class="br0">[MSG.<span class="me1">m_empty<span class="sy0">, MSG.<span class="me1">merr<span class="br0">]<span class="br0">)<span class="sy0">;@H403_1@</td>
</tr></table>

猜你在找的程序笔记相关文章