首页 / 设计模式 / js设计模式--行为型--策略模式
js设计模式--行为型--策略模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了js设计模式--行为型--策略模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2588字,纯文字阅读大概需要4分钟。
内容图文
![js设计模式--行为型--策略模式](/upload/InfoBanner/zyjiaocheng/1008/0db34bf01b7443d98861fede0550488d.jpg)
行为模式:策略模式
策略模式: 定义一系列的算法,把他们一个个封装起来,并且使它们可相互替换。
假设场景:有同一个商品,通过在后台给它设置不同的价格类型,让他展示不同的价格。
- 当价格类型为“预售价”时,满 100 - 20,不满 100 打 9 折
- 当价格类型为“大促价”时,满 100 - 30,不满 100 打 8 折
- 当价格类型为“返场价”时,满 200 - 50,不叠加
- 当价格类型为“尝鲜价”时,直接打 5 折
1 /** 2 * 预售价 - pre 3 * 大促销 - onSale 4 * 返厂价 - back 5 * 尝鲜价 - frech 6 */ 7 8 // 处理预售价 9 function prePrice(origin) { 10 if (origin >= 100) { 11 return origin - 20; 12 } 13 return originPrice * 0.9; 14 } 15 // 处理大促销 16 function onSalePrice(origin) { 17 if (origin >= 200) { 18 return origin - 30; 19 } 20 return origin * 0.8; 21 } 22 // 处理返厂价 23 function backPrice(origin) { 24 if (origin >= 200) { 25 return origin - 50; 26 } 27 return origin; 28 } 29 // 处理尝鲜价 30 function freshPrice(origin) { 31 return originPrice * 0.5; 32 } 33 34 function askPrice(tag, origin) { 35 if (tag === "pre") { 36 return prePrice(origin); 37 } 38 if (tag === "onSale") { 39 return onSalePrice(originPrice); 40 } 41 if (tag === "back") { 42 return backPrice(originPrice); 43 } 44 if (tag === "fresh") { 45 return freshPrice(originPrice); 46 } 47 }
假如新加一个 新用户的函数 newUser,那么在 askPrice 里面,还需要在添加一个if,我们还是在修改 askPrice 的函数体,没有实现 对外开放,对修改封闭 的效果。
把查询标签 -- 查询价格函数 这个映射确定下来,这里用到 对象映射。
1 /** 2 * 预售价 - pre 3 * 大促销 - onSale 4 * 返厂价 - back 5 * 尝鲜价 - frech 6 */ 7 // 定义一个查询价格处理器对象 8 // 把查询价格方法全部收敛写道一个对象里面 9 const priceProcessor = { 10 pre(originPrice) { 11 if (originPrice >= 100) { 12 return originPrice - 20; 13 } 14 return originPrice * 0.9; 15 }, 16 onSale(originPrice) { 17 if (originPrice >= 100) { 18 return originPrice - 30; 19 } 20 return originPrice * 0.8; 21 }, 22 back(originPrice) { 23 if (originPrice >= 200) { 24 return originPrice - 50; 25 } 26 return originPrice; 27 }, 28 fresh(originPrice) { 29 return originPrice * 0.5; 30 }, 31 }; 32 // 询价函数 33 function askPrice(tag, originPrice) { 34 return priceProcessor[tag](originPrice); 35 } 36 37 //如果你需要新人价,只需要给 priceProcessor 添加一个新的映射关系 38 priceProcessor.newUser = function (originPrice) { 39 if (originPrice >= 100) { 40 return originPrice - 50; 41 } 42 return originPrice; 43 };
下面方法是对上面方法的重构,这个重构的过程就是 策略模式 的应用。
内容总结
以上是互联网集市为您收集整理的js设计模式--行为型--策略模式全部内容,希望文章能够帮你解决js设计模式--行为型--策略模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。