本文实例讲述了 JS 设计模式之策略模式概念与用法分享给大家供大家参考, 具体如下:
策略模式的概念引用:
在软件开发中也常常遇到类似的情况, 实现某一个功能有多种算法或者策略, 我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能
如查找排序等, 一种常用的方法是硬编码 (Hard Coding) 在一个类中, 如需要提供多种查找算法, 可以将这些算法写到一个类中, 在该类中提供多个方法, 每一个方法对应一个具体的查找算法; 当然也可以将这些查找算法封装在一个统一的方法中, 通过 ifelse 或者 case 等条件判断语句来进行选择
这两种实现方法我们都可以称之为硬编码, 如果需要增加一种新的查找算法, 需要修改封装算法类的源代码; 更换查找算法, 也需要修改客户端调用代码
在这个算法类中封装了大量查找算法, 该类代码将较复杂, 维护较为困难如果我们将这些策略包含在客户端, 这种做法更不可取, 将导致客户端程序庞大而且难以维护, 如果存在大量可供选择的算法时问题将变得更加严重.
举例说明:
一出行旅游: 我们可以有几个策略可以考虑: 可以骑自行车, 汽车, 做火车, 飞机每个策略都可以得到相同的结果, 但是它们使用了不同的资源
选择策略的依据是费用, 时间, 使用工具还有每种方式的方便程度
二在一个购物商城, 在五一做了一个活动, 所以图书类商品根据购买的金额做出以下折扣策略
1 购买满 199 元, 打 9 折
2 购买满 399 元, 打 8 折
3 购买满 599 元以上, 打 7 折;
- function BookStrategy() {
- this.calcPrice = function(price) {
- console.log("未打折 =" + price);
- }
- }
- function BookCalc9Strategy() {
- this.calcPrice = function(price) {
- console.log("原价是:" + price + "; 打 9 折后:" + (price * 0.9));
- }
- }
- function BookCalc8Strategy() {
- this.calcPrice = function(price) {
- console.log("原价是:" + price + "; 打 8 折后:" + (price * 0.8));
- }
- }
- function BookCalc7Strategy() {
- this.calcPrice = function(price) {
- console.log("原价是:" + price + "; 打 7 折后:" + (price * 0.7));
- }
- }
- function PriceCalc(_strategy) {
- this.strategy = _strategy;
- this.getPrice = function(price) {
- return this.strategy.calcPrice(price);
- }
- }
- function Client() {
- var price = 100;
- var priceCalc = null;
- if (199 <= price && price < 399) {
- priceCalc = new PriceCalc(new BookCalc9Strategy());
- } else if (399 <= price && price < 599) {
- priceCalc = new PriceCalc(new BookCalc8Strategy());
- } else if (599 <= price) {
- priceCalc = new PriceCalc(new BookCalc7Strategy());
- } else {
- priceCalc = new PriceCalc(new BookStrategy());
- }
- priceCalc.getPrice(price);
- }
- Client();
运行结果:
更多关于 JavaScript 相关内容可查看本站专题: javascript 面向对象入门教程 JavaScript 切换特效与技巧总结 JavaScript 查找算法技巧总结 JavaScript 错误与调试技巧总结 JavaScript 数据结构与算法技巧总结 JavaScript 遍历算法与技巧总结及 JavaScript 数学运算用法总结
希望本文所述对大家 JavaScript 程序设计有所帮助
您可能感兴趣的文章:
JavaScript 设计模式经典之命令模式
深入理解 JavaScript 系列(34): 设计模式之命令模式详解
JS 基于设计模式中的单例模式 (Singleton) 实现封装对数据增删改查功能
JS 设计模式之观察者模式实现实时改变页面中金额数的方法
JS 设计模式之状态模式概念与用法分析
JS 设计模式之访问者模式定义与用法分析
JavaScript 设计模式之调停者模式实例详解
JS 设计模式之责任链模式实例详解
JavaScript 编程设计模式之构造器模式实例分析
JavaScript 设计模式 安全沙箱模式
JS 设计模式之命令模式概念与用法分析
来源: http://www.jb51.net/article/134393.htm