当前位置: 首页 > news >正文

个性化网站建设定制表白网页制作网站

个性化网站建设定制,表白网页制作网站,服装网站建设规定,wordpress 换图片地址文章目录 策略模式实现思想实战 - 表单 策略模式 定义#xff1a;定义一系列算法#xff0c;把它们一个个封装起来#xff0c;并且可以互相替换 例如#xff0c;我们要计算年终奖#xff0c;年终奖根据绩效 A、B、C 来计算最终数值 实现 最初我们很容易想到用 分支 if… 文章目录 策略模式实现思想实战 - 表单 策略模式 定义定义一系列算法把它们一个个封装起来并且可以互相替换 例如我们要计算年终奖年终奖根据绩效 A、B、C 来计算最终数值 实现 最初我们很容易想到用 分支 if 来解决这个问题如果绩效 A 则工资 x 2如果绩效 B 则工资 x 3 如果经常使用这样的分支结构你会发现代码耦合度很高很容易就出现一大坨代码堆砌在一起只是 x 2 或者 x 3 不足以形成难以维护的结构但如果不是 x 2 而是一个复杂的代码块我们显然会想到封装里面的代码 var performA function (salary) {return salary * 4; };var performB function (salary) {return salary * 3; };var performC function (salary) {return salary * 2; };var calcBonus function (level, salary) {if (level A) {return performA(salary);} else if (level B) {return performB(salary);} else if (level C) {return performC(salary);} }; 是的虽然我们优化了代码但没好到哪去如果要添加一个 D 级我们还是得堆砌代码 让我们来看看策略模式怎么做吧策略模式让 策略 被定义和封装且可以相互替换 这就是最终代码了但在 javascript 中实现策略相较 C# 或者其他语言来说要容易的多在下面举例了 C# 代码 var strategies {A: function (salary) {return salary * 4;},B: function (salary) {return salary * 3;},C: function (salary) {return salary * 2;}, };var calculateBonus function (level, salary) {return strategies[level](salary); };需要注意的是 strategies 对象存储的 3 个匿名函数 Func 类是用来存储函数的需要一定的函数工具类基础 掌握这样的思想以后试着把 {A, (salary) salary * 4} 解耦出去动态添加即可 using System; using System.Collections.Generic;public class Program {private static Dictionarystring, Funcdouble, double strategies new Dictionarystring, Funcdouble, double(){{A, (salary) salary * 4},{B, (salary) salary * 3},{C, (salary) salary * 2}};private static double CalculateBonus(string level, double salary){return strategies[level](salary);}public static void Main(string[] args){string level A;double salary 1000;double bonus CalculateBonus(level, salary);Console.WriteLine(Bonus: bonus);} }思想 通过上面的重构 消除了大片的分支语句计算奖金的逻辑不再存储在 CalculateBonus 里了而是分布在策略对象里策略对象只负责计算奖金策略对象之间可以相互替换 实战 - 表单 这是一种尤为常见的表单验证方式相信绝大多数前端程序员这样写过 显然能发现这里的 if 堆砌过多不仅如此内部的 逻辑 相比上面的代码也更复杂 var registerForm function (form) {if (form.username.value ) {alert(用户名不能为空);return false;}if (form.password.value.length 6) {alert(密码长度不能少于6位);return false;}if (!/(^1[3|5|8][0-9]{9}$)/.test(form.phoneNumber.value)) {alert(手机号码格式不正确);return false;} }; 我们可以用策略模式的思路来实现类似这样的代码这样当我们需要增加验证步骤时只需要添加策略内容即可 var validateStrategy {isNotEmpty: function (form) {if (form.name ) {return 用户名不能为空;}return ;},minLength: function (form) {if (form.password.length 6) {return 密码长度不能少于6位;}return ;},isMobile: function (form) {if (!/(^1[3|5|8][0-9]{9}$)/.test(form.phone)) {return 手机号码格式不正确;}return ;}, };var validate function (form) {for (let func in validateStrategy) {if (validateStrategy.hasOwnProperty(func) typeof validateStrategy[func] function) {var msg validateStrategy[func](form);if (msg ! ) return false;}}return true; };
http://www.w-s-a.com/news/703471/

相关文章:

  • 做网站需要什么软件wordpress会员邮件通知
  • 技术支持网站合肥网站搭建
  • 无为网站设计免费制作企业网站平台
  • 社交网站第一步怎么做房屋装修效果图用什么软件
  • 企业网站 批量备案合肥 网站建设
  • 如何提高网站索引量室内设计师之路网站
  • ps怎么做响应式网站布局图现在做网站都是怎么做的
  • 导购 网站模板网站主题选择
  • 毕业设计医院网站设计怎么做郑州铭功路网站建设
  • 网站根域名是什么php做商城网站步骤
  • 建设网站的那个公司好网站建设万首先金手指12
  • 广东民航机场建设有限公司网站网站开发后端用什么
  • 做风帆网站需要多少钱越野车网站模板
  • 如何做网站平台销售用狗做头像的网站
  • 宝安电子厂做网站美食网页设计的制作过程
  • 网站logo提交学网站开发技术
  • 跨境电商平台网站建设广州西安官网seo推广
  • 我和你99谁做的网站小程序制作第三方平台
  • 建设银行网站用户名鹤岗网站seo
  • 做一元夺宝网站需要什么条件西安市做网站的公司
  • 零基础建设网站教程郑州做网站推广价格
  • 平面设计免费素材网站新开三端互通传奇网站
  • ppt模板免费下载 素材医疗seo网站优化推广怎么样
  • 课程网站怎么做wordpress文章改背景色
  • 网络营销从网站建设开始卖汽车配件怎么做网站
  • 手机商城网站制作公司济南想建设网站
  • .net 建网站网站网站做员工犯法吗
  • 电子商务网站建设说课稿棕色网站设计
  • 怎么做律所的官方网站红塔网站制作
  • 装一网装修平台官网惠州seo按天付费