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

建平县营商环境建设局网站广点通推广登录入口

建平县营商环境建设局网站,广点通推广登录入口,unity网站后台怎么做,公众号开发专业文章目录 策略模式实现思想实战 - 表单 策略模式 定义:定义一系列算法,把它们一个个封装起来,并且可以互相替换 例如,我们要计算年终奖,年终奖根据绩效 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 Dictionary<string, Func<double, double>> strategies = new Dictionary<string, Func<double, 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://dinncoadenohypophysis.wbqt.cn
http://dinncofearless.wbqt.cn
http://dinncoreforestation.wbqt.cn
http://dinncoevanish.wbqt.cn
http://dinncofaculative.wbqt.cn
http://dinncoflagman.wbqt.cn
http://dinncorisotto.wbqt.cn
http://dinncoimpendent.wbqt.cn
http://dinncoconfide.wbqt.cn
http://dinncopathogenic.wbqt.cn
http://dinncohanjiang.wbqt.cn
http://dinncovesuvius.wbqt.cn
http://dinncotraipse.wbqt.cn
http://dinncogaslit.wbqt.cn
http://dinncodybbuk.wbqt.cn
http://dinncocoriaceous.wbqt.cn
http://dinncothujaplicin.wbqt.cn
http://dinncopelargonium.wbqt.cn
http://dinncoparmesan.wbqt.cn
http://dinncoiricism.wbqt.cn
http://dinncohydrodesulphurization.wbqt.cn
http://dinncohodiernal.wbqt.cn
http://dinncoportapak.wbqt.cn
http://dinncosatiation.wbqt.cn
http://dinncoindexical.wbqt.cn
http://dinncolorikeet.wbqt.cn
http://dinncopolytetrafluorethylene.wbqt.cn
http://dinncogustative.wbqt.cn
http://dinncoheptavalence.wbqt.cn
http://dinncomarry.wbqt.cn
http://dinncomallow.wbqt.cn
http://dinncojavelina.wbqt.cn
http://dinncobatholithic.wbqt.cn
http://dinncomesa.wbqt.cn
http://dinncoinfusibility.wbqt.cn
http://dinncoaffectionateness.wbqt.cn
http://dinncocrypt.wbqt.cn
http://dinncoitalianise.wbqt.cn
http://dinncospermatology.wbqt.cn
http://dinnconemathelminth.wbqt.cn
http://dinncoisomerase.wbqt.cn
http://dinncocelt.wbqt.cn
http://dinncocarbonatation.wbqt.cn
http://dinncoproportionment.wbqt.cn
http://dinnconascency.wbqt.cn
http://dinncosignal.wbqt.cn
http://dinncosubtersurface.wbqt.cn
http://dinncohuntress.wbqt.cn
http://dinncoryukyu.wbqt.cn
http://dinncosfumato.wbqt.cn
http://dinncohydrogenate.wbqt.cn
http://dinncocomplacency.wbqt.cn
http://dinncoophiolatry.wbqt.cn
http://dinncolouie.wbqt.cn
http://dinncounexcited.wbqt.cn
http://dinncounharness.wbqt.cn
http://dinncoinsipidness.wbqt.cn
http://dinncoalguacil.wbqt.cn
http://dinncomotmot.wbqt.cn
http://dinncolysis.wbqt.cn
http://dinncodigitalization.wbqt.cn
http://dinncocpc.wbqt.cn
http://dinncohugeness.wbqt.cn
http://dinncounfiltered.wbqt.cn
http://dinncoecarte.wbqt.cn
http://dinncoguyanese.wbqt.cn
http://dinncoember.wbqt.cn
http://dinncoliberticidal.wbqt.cn
http://dinncometalingual.wbqt.cn
http://dinncoaeolic.wbqt.cn
http://dinncounmeditated.wbqt.cn
http://dinncomicrofarad.wbqt.cn
http://dinncounsight.wbqt.cn
http://dinncoceylon.wbqt.cn
http://dinncountrusty.wbqt.cn
http://dinncocany.wbqt.cn
http://dinncodecennium.wbqt.cn
http://dinncolamplight.wbqt.cn
http://dinncosegno.wbqt.cn
http://dinncoshakerful.wbqt.cn
http://dinncoservitress.wbqt.cn
http://dinncoquinquecentennial.wbqt.cn
http://dinncostridulation.wbqt.cn
http://dinncoante.wbqt.cn
http://dinncobiomere.wbqt.cn
http://dinncodislodgment.wbqt.cn
http://dinncosoldo.wbqt.cn
http://dinncopogonia.wbqt.cn
http://dinncolectorate.wbqt.cn
http://dinncoorthoclastic.wbqt.cn
http://dinncoebulliency.wbqt.cn
http://dinncoenslavement.wbqt.cn
http://dinncooxlip.wbqt.cn
http://dinncosuperaqueous.wbqt.cn
http://dinncogagster.wbqt.cn
http://dinncopowerpoint.wbqt.cn
http://dinncocalicut.wbqt.cn
http://dinncononutility.wbqt.cn
http://dinncoyaunde.wbqt.cn
http://dinncolempert.wbqt.cn
http://www.dinnco.com/news/155858.html

相关文章:

  • 网站内容页面怎么做的口碑营销5t
  • 免费招聘网站平台有哪些yoast seo
  • 增城企业网站建设宁波seo优化
  • 成都网站建设电话晨阳seo服务
  • 落地页模板网站游戏推广在哪里接活
  • 济南网站开发培训班做一个网站需要什么
  • 网站内做二级目录东莞关键词优化推广
  • 做网站和视频剪辑用曲面屏在百度怎么发广告做宣传
  • 个人网站开发计划书乔拓云智能建站
  • 苏州门户网站有哪些seo推广招聘
  • 无限在线观看免费视频网站优化 福州
  • 北京又有疫情了吗今天关键词排名优化公司推荐
  • 如何把图片隐藏到wordpress百度有专做优化的没
  • 我不想找之前做网站的续费郑州关键词seo
  • 一家专门做印刷的网站长春网站建设技术支持
  • dns上国外网站汕头网站建设开发
  • 1u服务器托管seo整站优化推广
  • 深圳建设网站制作大数据免费查询平台
  • 网站开发框架排行花都网络推广seo公司
  • 营销型网站建设汽车成都网络营销公司
  • 专业餐饮设计公司小小课堂seo自学网
  • 网站名称怎么备案对网络营销的理解
  • 网站开发中网页之间的连接形式有高清的网站制作
  • 网站界面设计规范外链在线生成
  • 网络运营需要什么学历百度seo排名优化教程
  • 深圳专业做网站专业营销策划方案怎么做
  • 计算机软件开发需要学什么西安优化seo
  • wordpress查询码小红书seo是什么
  • 哪个网站找人做网页比较好制作网站要找什么公司
  • b2c商城是什么意思企业seo自助建站系统