1.
问题叙述:
根据购买商品的价格和数量计算优惠后的价格。
抽象类代码如下:
public abstract class CashSuper {
public abstract double acceptCash(double money);
}
多个实现类代码如下:
/*
* @description * 正常收费子类 :
* @return
* @author
* @date 2020/12/13 20:28
**/
public class CashNormal extends CashSuper{
@Override
public double acceptCash(double money) {
return money;
}
}
/*
* @description * 打折消费子类 :
* @return
* @author
* @date 2020/12/13 20:28
**/
public class CashRebate extends CashSuper{
private double moneyRebate=1d;
public CashRebate(double moneyRebate) {
this.moneyRebate = moneyRebate;
}
public CashRebate() {
}
public double getMoneyRebate() {
return moneyRebate;
}
public void setMoneyRebate(double moneyRebate) {
this.moneyRebate = moneyRebate;
}
@Override
public double acceptCash(double money) {
return money*moneyRebate;
}
}
/*
* @description * 返利收费子类:
* @return
* @author
* @date 2020/12/13 20:29
**/
public class CashReturn extends CashSuper{
private double moneyCondition=0.0d;
private double moneyReturn=0.0d;
public CashReturn(double moneyCondition, double moneyReturn) {
this.moneyCondition = moneyCondition;
this.moneyReturn = moneyReturn;
}
@Override
public double acceptCash(double money) {
double result =money;
if(money>=moneyCondition)
result=money-(money/moneyCondition)*moneyReturn;
return result;
}
public double getMoneyCondition() {
return moneyCondition;
}
public void setMoneyCondition(double moneyCondition) {
this.moneyCondition = moneyCondition;
}
public double getMoneyReturn() {
return moneyReturn;
}
public void setMoneyReturn(double moneyReturn) {
this.moneyReturn = moneyReturn;
}
}
简单工厂类如下:
public class CashFactory {
public static CashSuper createCashAccept(String type){
CashSuper cs=null;
switch(type){
case "正常收费":
cs=new CashNormal();
break;
case "满300返100":
cs=new CashReturn(300,100);
break;
case "打8折":
cs=new CashRebate(0.8);
break;
}
return cs;
}
}
测试controller方法如下:
@ApiOperation("简单工厂模式")
@RequestMapping(value="factorypattern", method = RequestMethod.GET)
public Result getTotal(Double money, Integer num,String type){
Result rs=new Result();
if(money==null|| num==null)
{
rs.setCode(300);
rs.setMsg("输入参数不能为空");
return rs;
}else{
CashSuper cashSuper= CashFactory.createCashAccept(type);
double totalPrice=cashSuper.acceptCash(money*num);
rs.setMsg("totalPrice:"+totalPrice);
}
return rs;
}
测试运行结果如下:
对应githup中的提交位置如下图所示: