//设计模式主要方便应用的扩展,和代码的解耦 拿一个商场促销的活动作为例子
/*
* 商场根据不同用户有不用的折扣计算, 如:新用户有10元免费优化, 老用户9折等等。这里写简单些 可以达到思想的效果就可以
*
* 分析步骤:
* 1. 首先每种用户都有计算价钱的方法 只是方法里面的实现不一样 因此将方法抽象出来
* 2. 每个方法根据不同的打折优惠策略进行计算价钱。
* 3. 在实际计算的时候根据不同种类获取不同的计算方式。
* 直接上代码、、
* */
/**
* @author huzhongkang
* @Title: ${file_name}
* @date 2020/5/2918:24
*/
public interface Calculator {
/**
* 统一的算账接口
* @param price 原始的price价钱
* @return
*/
BigDecimal account(BigDecimal price);
}
/**
* @author huzhongkang
* @Title: ${file_name}
* @date 2020/5/2918:26
*/
public class NewUserCalcultor implements Calculator {
//新用户满50减10元
@Override
public BigDecimal account(BigDecimal price) {
if (price.compareTo(BigDecimal.valueOf(50)) >= 0) {
return price.subtract(BigDecimal.valueOf(10));
}
return price;
}
}
/**
* @author huzhongkang
* @Title: ${file_name}
* @date 2020/5/2918:33
*/
public class OldUserCalcultor implements Calculator {
//老用户9折优惠
@Override
public BigDecimal account(BigDecimal price) {
BigDecimal multiply = price.multiply(new BigDecimal(0.9));
return multiply;
}
}
/**
* @author huzhongkang
* @Title: ${file_name}
* @date 2020/5/2918:35
*/
public class StrategyUtil {
//策略分配器,用来分配不停尝尽的中转器
//优惠前的价格
private BigDecimal price;
//策略分配计算器
private Calculator calculator;
/**
* 提交订单计算价格
*/
public BigDecimal subOrder(){
return calculator.account(this.price);
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public Calculator getCalculator() {
return calculator;
}
public void setCalculator(Calculator calculator) {
this.calculator = calculator;
}
}
//设计模式主要方便应用的扩展,和代码的解耦 拿一个商场促销的活动作为例子
/*
* 商场根据不同用户有不用的折扣计算, 如:新用户有10元免费优化, 老用户9折等等。这里写简单些 可以达到思想的效果就可以
*
* 分析步骤:
* 1. 首先每种用户都有计算价钱的方法 只是方法里面的实现不一样 因此将方法抽象出来
* 2. 每个方法根据不同的打折优惠策略进行计算价钱。
* 3. 在实际计算的时候根据不同种类获取不同的计算方式。
* 直接上代码、、
* */
public static void main(String[] args) {
//1 来了一个新用户花了60块
StrategyUtil strategyUtil = new StrategyUtil();
strategyUtil.setPrice(BigDecimal.valueOf(60));
NewUserCalcultor newUserCalcultor = new NewUserCalcultor();
strategyUtil.setCalculator(newUserCalcultor);
BigDecimal bigDecimal = strategyUtil.subOrder();
System.out.println("new User 花了" + bigDecimal.doubleValue());
//老用户花了100块
strategyUtil.setPrice(BigDecimal.valueOf(100));
OldUserCalcultor oldUserCalcultor = new OldUserCalcultor();
strategyUtil.setCalculator(oldUserCalcultor);
System.out.println("old User 消费:" + strategyUtil.subOrder().doubleValue());
}
}
new User 花了50.0
old User 消费:90.0