JavaScript设计模式策略模式案例分享_第1页
JavaScript设计模式策略模式案例分享_第2页
JavaScript设计模式策略模式案例分享_第3页
JavaScript设计模式策略模式案例分享_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第JavaScript设计模式策略模式案例分享前言

策略设计模式就是指一个问题匹配多个解决方法,不一定要用到哪一个,而且有可能随时增加多个方案

比如我们去买书,书店都会搞一些优惠活动,满100减20,满200减50,八折优惠这些,但是优惠活动源源不止这些,后期会陆续添加优惠活动,比如双11活动打七折,等到双11活动过去之后打七折活动还需要取消

我们先不用策略设计模式进行实现计算折扣后价格,我们声明一个方法,里面接受俩个参数,这俩个参数一个是价格一个是折扣种类,然后在方法里面使用if语句判断折扣种类计算价格,如果没有折扣就是原价,最后把计算过的折扣价格返回出去

//price价格

//type折扣种类

functioncalcPrice(price,type){

if(type=='100_20'){

price-=20

}elseif(type=='200_50'){

price-=50

returnprice;

//使用

constbookPrice=calcPrice(300,'100_20')

这种方式如果是折扣活动比较少的情况下还行,但是每次添加新的折扣活动都需要去往方法里面添加折扣活动的if语句判断以及记住新折扣种类的字段以免和之前的折扣活动名字重复,对于折扣活动到期的情况还需要手动进行删除该if语句,长此以往代码不仅冗余还很维护

使用策略设计模式实现:

我们声明一个闭包函数,闭包函数中有一个折扣种类中心,里面有默认的几个折扣种类,还有一个计算折扣价格的方法,方法上我们又给他定义了俩个方法,一个是添加折扣种类方法,一个是删除折扣种类方法,然后在把计算折扣方法暴露出去就可以了

//计算折扣价格闭包函数

constcalcPrice=(function(){

//折扣种类中心

constsale={

//100-20折扣活动

'100_20':function(price){

returnprice-=20

//200-50折扣活动

'200_50':function(price){

returnprice-=50

//打八折折扣活动

'80%':function(price){

returnprice*=0.8

/***

*计算折扣价格

*price价格

*type折扣类型

***/

functiontotalPrice(price,type){

//判断折扣种类里面是否拥有这个折扣类型,如果有就执行,没有就返回原价

if(sale[type]){

//使用折扣函数

price=sale[type](price)

//返回价格

returnprice

*添加折扣方法

*type折扣类型

*callback折扣类型方法

***/

totalPrice.add=function(type,callback){

//判断折扣类型是否存在

if(sale[type])return'折扣已存在'

//给折扣类型中心添加折扣价格方法

sale[type]=callback

return'折扣方法添加成功'

//删除折扣方法

totalPrice.del(type){

//通过delete关键字删除折扣类型中心方法

deletesale[type]

//被return出去的函数,才是计算价格的本体

returntotalPrice

})();

//使用计算价格

constbookPrice=calcPrice(240,'200_50');

//添加打七折折扣类型方法

calcPrice.add('70%',function(price){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论