一、场景:在实际的项目开发中,我们常常会遇到这样的问题,实现一个功能有多重方法或策略。
比如商场中计算价格的方法:
1、商场中没有活动,那么收费就是原价;
2、商场中有活动,打8折;
3、商场中有活动,满300件100;
这三个中计算价格的方法就是三种策略。我们在不适用设计模式的情况下,就只能用if...else...获取switch..case..来判断使用哪一中计算方法,如下代码块:
/**
* 增加打折功能,在客户端增加一个折扣下拉选,打8折、7折、5折
* @param price 单价
* @param count 数量
* @param discount 折扣
* @return
*/
public Double calculation2(Double price,Double count,String discount){
Double result=0D;
if(price==null || count==null){
return result;
}
switch (discount) {
case "打8折":
result=price*count*0.8;
break;
case "打7折":
result=price*count*0.7;
break;
case "打5折":
result=price*count*0.5;
break;
default:
result=price*count;
break;
}
return result;
}
这样写可以实现搞活动的功能,但是这样写代码属于硬编码,如果商场中不搞活动了或者新增加了一种活动规则,我们就需要重写代码