博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解js设计模式之策略模式
阅读量:4553 次
发布时间:2019-06-08

本文共 1621 字,大约阅读时间需要 5 分钟。

  策略模式的定义:定义一系列的算法,然后根据实际情况去调用

  一个小插曲:最近在项目的过程中接手了一个比较复杂的需求,由于是旧的项目用新的框架重构,所以能够看见以前的代码,吸取下前人代码的精华,复用一些可用的代码,免得自己写半天。。当然这篇的主题是策略模式,不会离题,因为当我完成了Version 1 后,项目里面大量的if-else 字段的验证都放在一个函数里面,而且不同字段有些还会相互影响,导致代码很长很乱大概有几十行的if else ,丝毫没有条理;这个时候,需要去重构这个原本的底层验证函数,那么就用上了策略模式

  给个策略模式放光彩的场景:验证一行数据的每一个字段的正确性,每一行的数据字段假设有6个,验证这6个字段的正确性,返回结果

  然后:假设6个字段分别是A B C D E F;

  如果不用策略模式,代码如下:

function check(data){   //data={A: ,B:  ,C:   ......}   if(data.A==???){      }else{        }   if(data.B==???){      }else{        }   if(data.C==???){      }else{        } . . .}

  这是糟糕的方式,那么进入策略模式的解决方案:

  首先,策略模式意味着你要有策略,什么是策略?就是每一种情况对应的解决方案 ;

       将函数内部的每个字段的方法抽离出来,这些一个个的判断方法就是策略!

  策略模式还有一个条件是什么?需要用到策略的地方能够访问到你的策略,抽离成函数的表现就是调用其他函数

       如何组织策略?抽离成一个一个的函数,然后调用,返回结果,但是这样子函数又显得非常的多,难以维护,js对象字面量提供了非常优雅的解决方案

var myStrategy={  A:function(value){     //判断     return result  },  B:function(value){     //判断     return result  },  C:function(value){     //判断     return result  },  D:function(value){     //判断     return result  },  E:function(value){     //判断     return result  },  F:function(value){     //判断     return result  }}

  这样子,就建立了一个策略对象,你可以通过新建一个js文件,保存页面所需要的各种策略,和底层的验证函数,需要用到的地方再去引用这个js文件这样应该是比较好的方式

  那么如何使用策略?

function  checke(data){  var strategy=require('myStrategy'),//获得策略对象      result={};  for(var key in data){  //假设key=A 那么,下面执行的就是:    result[key]=strategy[key](data[key]);   //result.A=strategy.A( data.A )  }  return result;}

  超级6的有没有,解释下上面的行为

  1,获得策略对象

  2,遍历数据对象,拿到每一次的 key ,也就是ABCDEF这些,

  3,然后去策略里面找对应的策略方法,执行拿到返回结果

  4,将结果赋给本地的result对象,里面的key,ABCDEF,保存着对应的字段错误信息,返回这个result对象

 

转载于:https://www.cnblogs.com/llauser/p/7382592.html

你可能感兴趣的文章
Android测试环境搭建
查看>>
storm进程正常运行一段时间shut down,运维方式
查看>>
NEFU 1112 粉刷栅栏算法
查看>>
把自己的项目上传到svn上面
查看>>
关于垂直居中
查看>>
统领全局的使用asp.net
查看>>
python 获取本地ip
查看>>
Ehlib 学习
查看>>
django-view层
查看>>
键盘按钮keyCode大全:获取按键对应的键值的方法
查看>>
unity3D中数组的应用_______蛋疼的____GameObject[]
查看>>
Win32Check对Windows操作 注销 重新启动 关闭计算机_Win32Check
查看>>
PHP编程效率的20个要点
查看>>
php中mongodb处理session的方法
查看>>
微信小程序 - 提示消息组件
查看>>
github博客搭建笔记
查看>>
make_head,,,pop_head,,,push_head,,,sort_head..
查看>>
c语言数据问题
查看>>
编程之美2015资格赛 解题报告
查看>>
团队开发
查看>>