做前端开发已经好几年了,对设计模式一直没有深入学习总结过。随着架构相关的工作越来越多,越来越能感觉到设计模式成为了我前进道路上的一个阻碍。所以从今天开始深入学习和总结经典的设计模式以及面向对象的几大原则。
今天第一天,首先来讲策略模式。
什么是策略模式?GoF四兄弟的经典《设计模式》中,对策略模式的定义如下:
定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。
上边这句话,从字面来看很简单。但是如何在开发过程中去应用,仅凭一个定义依然是一头雾水。以笔者曾经做过的商户进销存系统为例:
某超市准备举行促销活动,市场人员经过调查分析制定了一些促销策略:
购物满100减10
购物满200减30
购物满300减50
。。。
收银软件的界面是这样的(简单示意):
我们应该如何计算实际消费金额?
最初的实现是这样的:
//方便起见,我们把各个促销策略定义为枚举值:0,1,2... var getActualTotal = function(onSaleType,originTotal){ if(onSaleType===0){ return originTotal-Math.floor(originTotal/100)*10 } if(onSaleType===1){ return originTotal-Math.floor(originTotal/200)*30 } if(onSaleType===0){ return originTotal-Math.floor(originTotal/300)*50 } } getActualTotal(1,2680); //2208