博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript设计模式学习三(策略模式)
阅读量:5237 次
发布时间:2019-06-14

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

定义:定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。

目的:将算法的使用和算法的实现分离开来。
比如:

if(input == 'A'){    return 1;}if(input == 'B'){    return 2;}if(input == 'C'){    return 3;}//或者switch(input){    case 'A':        console.log(1);        break;    case 'B':        console.log(2);        break;    case 'C':        console.log(3);        break;}

对于这种有多个if-else和switch语句的情况,可以使用策略模式来处理。

策略模式有两部分组成:
一、策略类:封装了具体的算法,并负责具体计算过程。
二、环境类:接受客户的请求,然后将请求委托给某个策略类

//策略类Strategyvar strategies = {    "A": function(num){        return 1 + num;    },    "B": function(num){        return 2 + num;    },    "C": function(num){        return 3 + num;    }};//环境类Contextvar calculate = function(level,num){    return strategies[level](num);};//调用result = calculate('A',10);

使用策略模式也可以用来封装一系列的业务规则,只要这些业务规则指向的目标一致,并且可以被替换使用,我们就可以用策略模式来封装它们。

表单校验:

一般写法:

function checkForm(){    if($("#name").val()==''){        alert('用户名不能为空!');        return false;    }    if($("#password").val().length<6){        alert('密码长度不能少于6位!');        return false;    }    if(!/(^1[3|5|8][0-9]{9}$)/.test($("#phone").val())){        alert('手机号格式不正确!');        return false;    }}

使用“策略模式”:

/***********************策略对象Strategy***********************/var strategise={    isEmpty: function(value,errorMsg){        if(value === ''){            return errorMsg;        }    },    minLength: function (value,length,errorMsg) {        if(value.length

 

优点:

1、采用组合、委托和多态等技术和思想,有效地避免多重条件选择语句。
2、对“开放封闭原则”完美支持,将算法独立封装在strategy,使得它们易于切换、理解和扩展。
3、策略模式中的算法也可以复用在系统的其他地方,从而避免重复的复制粘贴工作。
4、利用组合和委托让Context拥有执行算法的能力,这也是继承的一种轻便替代方案。

 

转载于:https://www.cnblogs.com/boliang/p/4820015.html

你可能感兴趣的文章
JavaScript 鸭子模型
查看>>
SQL Server 如何查询表定义的列和索引信息
查看>>
GCD 之线程死锁
查看>>
NoSQL数据库常见分类
查看>>
一题多解 之 Bat
查看>>
Java 内部类
查看>>
{面试题7: 使用两个队列实现一个栈}
查看>>
【练习】使用事务和锁定语句
查看>>
centos7升级firefox的flash插件
查看>>
Apache Common-IO 使用
查看>>
评价意见整合
查看>>
二、create-react-app自定义配置
查看>>
Android PullToRefreshExpandableListView的点击事件
查看>>
系统的横向结构(AOP)
查看>>
linux常用命令
查看>>
NHibernate.3.0.Cookbook第四章第6节的翻译
查看>>
使用shared memory 计算矩阵乘法 (其实并没有加速多少)
查看>>
Django 相关
查看>>
git init
查看>>
训练记录
查看>>