<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script> var varlidator; varlidator = { validate: function(value, type){ var value = value; var type = type; switch(type){ case 'isnonEmpty' : { /…
1. 策略模式 策略模式定义一系列的算法,把它们封装起来,并且可以互相替换. var strategies = { isNonEmpty: function(value,errMsg){ if(value === ''){ return errMsg; } }, minLength:function(value,length,errMsg){ if(value.length < length){ return errMsg; } } } var validator = function(){ t…
一.策略模式 策略模式:封装易变化的算法,可互相替换. GoF<设计模式>中说道:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换.该模式使得算法可独立于它们的客户变化. 比如:一个推送服务类,推送的方式,可以分为:QQ推送.邮箱推送.App推送.PC插件推送. 这里讲两个点: 1.推送方式可以互相替换: 2.这些推送方式只是单纯的属于推送服务这个类本身. 好好琢磨关键词:相互替换 二.命令模式 命令模式:解决“行为请求者”与“行为实现者”通常呈现一种“紧耦合”的问题. GoF&l…
抽象.封装,具体事情做得越多,越容易犯错误.这每个做过具体工作的人都深有体会,相反,官做得越高,说出的话越抽象越笼统,犯错误可能性就越少.好象我们从编程序中也能悟出人生道理.(百度百科) 不断抽象封装,让复杂事物变得简单,以便于让我们的大脑能够进行处理. 我记得有那么一天,小吴带着女朋友去城西银泰买手机,他们走进一家小米手机店,对卖家(seller)说:“给我一部小米的手机看看?”卖家心里想:“废话,在小米店里,我还能卖苹果手机给你啊!直接说手机呀” 在C语言面向过程下,我们编程就是这样的,必须…
不得不说,这两种模式真的很像. 相似点:都用到了面向对象的继承.多态.抽象,都拥有相似的结构. 不同点:工厂模式仅提供具体的实例对象,怎么使用这个对象是client的自由,策略模式client可以通过策略类来决定使用哪个实例的哪个方法. 一.两种模式的公共相同部分 下面,我们假设有一台红白机,里面有一些游戏,每个游戏拥有play(玩)和uninstall(卸载)两个方法. 按照工厂和策略模式,我们抽象出来一个Game接口: public interface Game { void play();…
策略模式(Strategy) 定义:将定义的一组算法封装起来,使其相互之间可以替换.封装的算法具有一定的独立性,不会随客户端的变化而变化 废话不多说,先来个例子 // 例如要写一个计算两个数加减乘除的方法,会有人这么写 countNum(type, num1, num2) { if(type === 'add'){ return num1 + num2 } else if(type === 'subtract'){ return num1 - num2 } else if(type === 'm…
在程序设计中,常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法.这些算法灵活多样,而且可以随意互相替换.这种解决方案就是本文将要介绍的策略模式.策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换 奖金计算 策略模式有着广泛的应用.以年终奖的计算为例进行介绍.很多公司的年终奖是根据员工的工资基数和年底绩效情况来发放的.例如,绩效为S的人年终奖有4倍工资,绩效为A的人年终奖有3倍工资,而绩效为B的人年…
设计模式高大上,业务代码用不上...平时用不上我们就可以忽略了吗? 非也,就像面试造火箭,工作拧螺丝一样.万一我们公司哪天要造火箭了,你得立马能上手. 同时,有些复杂的业务代码也可以用设计模式的思想去写,如果你对设计模式不了解,到时怎么会想到呢?那你写出来的代码怕是很难去阅读和维护. 说了那么多,就是想说一点:设计模式很棒!你可以不用,但不能不会!下面来聊聊策略模式: 策略模式的定义 何为策略?比如我们要去西藏旅游,可以根据自身的实际情况来选择出行的路线. 如果没有时间但是不在乎钱,可以选择坐飞…
策略模式: 定义了一系列的算法,把他们封装起来,是它们之间可以互相替换,此模式不会影响到使用算法的客户. 回忆下jquery里的animate方法: $( div ).animate( {"left: 200px"}, 1000, 'linear' ); //匀速运动 $( div ).animate( {"left: 200px"}, 1000, 'cubic' ); //三次方的缓动 这2句代码都是让div在1000ms内往右移动200个像素. linear(匀…
策略模式: 策略模式 概述 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化. 适用性 1.许多相关的类仅仅是行为有异.“策略”提供了一种用多个行为中的一个行为来配置一个类的方法. 2.需要使用一个算法的不同变体. 3.算法使用客户不应该知道的数据.可使用策略模式以避免暴露复杂的.与算法相关的数据结构. 4.一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现. 将相关的条件分支移入它们各自的Strategy类中以代替这…