策略模式

策略模式详解 1.简介 在现实生活中长长遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超时促销可以采用打折、送商品、送积分等方法。 在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。 如果使用多重条件转移语句实现(即硬编码),不但使条件语句变得很复杂,而且增加。删除或更换算法要修改原代码,不易维护,违背开闭原则。如 阅读详情

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

策略模式可用于缓动动画,表单验证等方面。

下面的代码是用于表单验证的策略模式。

/*******************策略类********************/
var strategies = {
    isNonEmpty: function(value, errorMsg){
        if (value === ''){
             return errorMsg; 
        }
    },                 
    minLength: function(value, length, errorMsg){
        if (value.length < length){
            return errorMsg; 
        }
    },
    isMobile: function(value, errorMsg){
        if (!/(^1[3|5|8][0-9]{9}$)/.test(value)){
            return errorMsg; 
        }
    },
};
/**********************Validator类*********************/
var Validator = function() {
    this.cache = [];
};

Validator.prototype.add = function(dom, rules) {
    var self = this;
    
    for(var i = 0, rule; rule = rules[i++]) {
        (function(rule) {
            var strategyAry = rule.strategy.split(':');
            var errorMsg = rule.errorMsg;

            self.cache.push(function() {
                var strategy = strategyAry.shift();
                strategyAry.unshift(dom.value);
                strategyAry.push(errorMsg);
                return strategies[strategy].apply(dom, strategyAry);
            })
        })(rule);    
    }
};

Validator.prototype.start = function() {
    for(var i = 0, validatorFunc; validatorFunc = this.cache[i++];) {
        var errorMsg = validatorFunc();
        if(errorMsg) {
            return errorMsg;
        }
    }
};
/****************调用方法****************/
var validatorFunc = function () {
    var validator = new Validator();

    validator.add(
        registerForm.userName,
        [
            { strategy: 'isNonEmpty', errorMsg: '用户名不能为空' },
            { strategy: 'minLength:6', errorMsg: '用户名长度不能小于 10 位' },
        ],
    );
    validator.add(
        registerForm.password,
        [
            { strategy: 'minLength:6', errorMsg: '密码长度不能小于 6 位' },
        ],
    );
    validator.add(
        registerForm.phoneNumber,
        [
            { strategy: 'isMobile', errorMsg: '手机号码格式不正确' },
        ],
    );

    var errorMsg = validator.start();
    return errorMsg;
}

 

Simulink进行无人机飞行力学建模与仿真 摘要:本文详细介绍了使用MATLAB/Simulink进行四旋翼无人机飞行力学建模与仿真的步骤。内容包括准备工作、动力学方程概述、模型构建(使用State-Space或Simscape Multibody)、可选控制器设计、仿真参数配置及结果分析。教程强调理解飞行力学原理和坐标系转换的重要性,建议根据需求选择模型复杂度,并推荐查阅学术文献获取更深入的建模方法。通过本教程,读者可掌握无人机动力学建模基础,为控制系统开发和性能优化奠定基础。 阅读详情

相关推荐

麒麟KylinV10系统yum源更换全攻略:从官方源到第三方仓库的保姆级教程

本文详细介绍了麒麟KylinV10系统yum源的更换与优化方法,包括官方源配置、第三方仓库集成及RPM包管理技巧。通过实战案例和命令示例,帮助用户快速解决软件依赖问题,提升系统管理效率。特别适合需要在国产操作系统上进行开发的工程师参考。

weixin_30752699的博客 649

策略模式的表单验证

/**策略模式的表单验证*//**************策略对象******************/var strategies = { isNonEmpty: function(value, errorMsg) { if (value === '') { return errorMsg; }; }, minLeng...

178

别再手动拆解字节了!用博图这个功能指令,5分钟搞定ARRAY转BOOL数组

本文详细介绍了西门子博图中`ARRAY_TO_BOOL`功能指令的高效应用,帮助工程师快速实现ARRAY到BOOL数组的转换。通过实战案例和参数配置指南,展示了如何5分钟内完成传统方法需半小时的任务,大幅提升PLC编程效率,特别适用于通信报文解析和设备状态监控。

weixin_42653691的博客 265

策略模式设计表单校验

第一步我们要把这些校验逻辑都封装成策略对象://策略对象 var strategies = { isNonEmpty: function (value, errorMsg) { if (value === '') { return errorMsg } }, minLength: function (value, le...

陈德优的博客 762

win10下Miracast无线投屏使用教程及异常解决方案(超详细)

文章目录一、什么是Miracast?二、主流的无线投屏技术有哪些特点?三、如何查看自己的win10电脑是否支持Miracast无线投屏功能?四、win10电脑如何使用Miracast无线投屏功能? 一、什么是Miracast? Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的3C设备(如智能手机、电视、投影、电脑等...

帅气的小白的博客 44万+

Fluent新手避坑:遇到‘Floating point exception’别慌,这7个排查步骤帮你搞定

本文为Fluent新手提供了7个排查'Floating point exception'错误的实用步骤,包括边界条件检查、时间步长优化、求解器配置等关键技巧。通过系统化的诊断流程,帮助用户快速定位并解决CFD仿真中的浮点异常问题,提升计算稳定性。

weixin_42531886的博客 288

Strategy 策略模式学习笔记

一、什么是策略模式 定义一个策略接口,封装若干该接口的实现策略,和一个实现容器,用户随取随用。 代码实现:见我的github:策略模式学习笔记 二、存在场景 支付方式 三、设计思路 策略接口 实现策略 实现容器 用户 ...

菜鸟哆哆的专栏 505

Java服务端实现Google Pay支付功能

全网最全代码、最清晰服务端处理Google Pay,最清晰讲解Google Pay集成逻辑。

jack2350536098的博客 1万+

策略模式在JavaScript中的使用

最近在看《JavaScript设计模式与开发实践》,一本很不错的书,本次内容整理自该书,以便日后翻阅。 在程序设计中,常常遇到类似的情况,要实现某一个功能有多种方案可以选择。比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法。这些算法灵活多样,而且可以随意互相替换。这种解决方案就是本文将要介绍的策略模式。策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换...

海阔天空 272

国科大学习资料--高级软件工程-复习题概念解释答案

国科大学习资料–高级软件工程(罗铁坚 魏峻 刘丹)-复习题概念解释答案 1. 敏捷开发方法与Scrum方法 a.敏捷是一种强调轻量的过程方法论,它强调拥抱变化而不是与之对抗,通过有效的沟通发挥群体的智慧。敏捷方法采用迭代/增量开发的过程模型。敏捷宣言是:个体和交互高于流程和工具;工作的软件高于详尽的文档;客户合作高于合同谈判;响应变化高于遵循计划。 虽然右边的也有价值,但是认为左边的更有价值。 b.Scrum(Schwaber和Beedle)是管理两个披萨规模(4-9人)的软件开发团队的方法,它高频率的短会

无名何许人的博客 1444

Claude Code Auto Memory 的 Storage Location,SAP ABAP 项目里的本地记忆仓库应该怎么理解

本文介绍了 SAP ABAP 项目中 Claude Code 的 auto memory 机制,重点探讨了其存储位置的设计原理。auto memory 不是存储在项目目录中,而是默认位于 ~/.claude/projects/<project>/memory/,其中 <project> 基于 Git 仓库路径推导,确保同一仓库下的所有工作目录和分支共享记忆。记忆目录包含入口文件 MEMORY.md(仅加载前 200 行)和详细主题文件,这种分层设计类似 CDS View 架构思想。文章还分析了按 Git 仓

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 101

java策略模式

目录 1 策略模式概述 2 策略模式的结构与实现 1. 模式的结构 2. 模式的实现 3 策略模式的应用实例 通用实现 报价管理的例子 策略和上下文的实例 1 策略模式概述  策略这个词应该怎么理解,打个比方说,我们出门的时候会选择不同的出行方式,比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等,这些出行方式,每一种都是一个策略。   再比如我们去逛商场,商场现在正在搞活动,有打折的、有满减的、有返利的等等,其实不管商场如何进行促销,说到底都是一些算法,这些算法本身只是一种策略,并且这

mocas_wang的博客 4515

从零到一,打造你的无人机侦察兵!树莓派+Python+MQTT,实时目标检测全攻略

物联网、人工智能与计算机视觉三大前沿技术的深度融合。

u013558123的博客 1475

策略模式的实现

策略模式就像是在餐厅点餐的过程。假设你和朋友一起去餐厅,你们可以根据自己的口味选择不同的菜肴。你可以点披萨,你的朋友可以点汉堡,而另一位朋友可以点沙拉。每个人都可以根据自己的喜好选择不同的策略(菜肴),但最终都能满足吃东西的需求。

Hardy Army的博客 1284

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

策略模式详解以及在spring中策略模式的两种简化应用

策略模式,同样可以消除掉繁杂的if else ,那么它和简单工厂模式的区别在哪? 简单工厂模式是根据传入的参数返回不同的产品,不同的产品内部封装了不同的逻辑。 策略模式类似,但是策略模式内部是封装了算法,也就是封装了某一种策略。 举个例子,超市活动打折优惠,1.普通计费。 2.满300减20 3.满400减80 4.满500打八折 如果用简单工厂模式,那么需要定义四个产品子类,如果将来又新增了...

hello world 7783

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【python】策略模式

策略模式。抽空学习下常见的20几种设计模式,python2.7来设计实现。基本就根据某设计模式书籍来实现python版本。希望能坚持下来全部介绍完。

weixin_42660118的博客 2624

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

策略模式&lambda重构策略模式

文章目录一、概念以及背景二、策略模式三、lambda重构策略模式三、拓展Java8提供的内置函数式接口 一、概念以及背景 策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户端而变化,也称为政策模式(Policy)。 简而言之,策略模式是客户端在运行时选择某种解决方案(策略,方法,算法)来解决问题,而解决方...

一砖一瓦 896

23种策略模式之策略模式

在软件开发中,设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式(Strategy Pattern)是其中一种常见的设计模式,它属于行为型模式。该模式的核心思想是将不同的算法封装成独立的策略类,使得它们可以相互替换,而不影响客户端的使用。策略模式与其他设计模式有一些明显的区别。与模板方法模式相比,策略模式强调算法的灵活性,允许在运行时切换不同的策略。与状态模式相比,策略模式更注重不同算法之间的替换性,而非状态的内部转换。策略Context(上下文)

一码归一码@ 1899

策略模式总结

文章目录策略模式一、什么是策略模式二、为什么要去使用策略模式三、框架中有哪些用到模板模式和策略模式四、项目实践中的策略模式实现五、总结1、策略模式的优缺点 策略模式 一、什么是策略模式 ​ 策略模式(Strategy Pattern),一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 ​ 策略模式适合于以下应用场景: 1)、许多类的区别仅在于其具体实现行为不同; 2)、需要动态的在几个算法中选择一个。 传统策略模式介绍: https://www.runoob.com/design

小发发的博客 768

【深入设计模式】策略模式—策略模式详解及策略模式在源码中的应用

详解策略模式,并深入策略模式再源码中的应用

SK_Jaco的博客 1357

java策略模式_Java设计模式之策略模式详解

本文实例为大家分享了Java策略模式,供大家参考,具体内容如下1、策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern)。定义如下:Define a family of algorithms,encapsulate each one,and make them interchangeable.(定义一组算法,将每个算法都封装起来,并且使它们之...

weixin_42355744的博客 1959
上一篇: 单例模式
下一篇: 发布-订阅模式
也无风雨丶
博客等级 码龄10年 52粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值