**
* @Author: subd
* @Date: 2019/9/11 8:08
* 策略模式
*/
public class StrategyMode {
/**
* 现金收费抽象类
*/
public static abstract class CashSuper {
public abstract double acceptCash(double money);
}
/**
* 正常收费子类
*/
public static class CashNormal extends CashSuper {
@Override
public double acceptCash(double money) {
return money;
}
}
/**
* 打折收费子类
*/
public static class CashRebate extends CashSuper {
private double moneyRebate = 1d;
public CashRebate(String moneyRebate) {
this.moneyRebate = Double.valueOf(moneyRebate);
}
@Override
public double acceptCash(double money) {
return money * moneyRebate;
}
}
/**
* 返利收费子类
*/
public static class CashReturn extends CashSuper {
private double moneyCondition = 0.0d;
private double moneyReturn = 0.0d;
public CashReturn(String moneyCondition, String moneyReturn) {
this.moneyCondition = Double.valueOf(moneyCondition);
this.moneyReturn = Double.valueOf(moneyReturn);
}
@Override
public double acceptCash(double money) {
double result = money;
if (money >= moneyCondition) {
result = money - Math.floor(money / moneyCondition) * moneyReturn;
}
return result;
}
}
public static class CashContext {
private CashSuper cs;
public CashContext(String type) {
switch (type) {
case "正常收费":
cs = new CashNormal();
break;
case "满300返100":
CashReturn cr1 = new CashReturn("300", "100");
cs = cr1;
break;
case "打8折":
CashRebate cr2 = new CashRebate("0.8");
cs = cr2;
break;
}
}
public double GetResult(double money) {
return cs.acceptCash(money);
}
}
public static class Client {
/**
* 用于总计
*/
double total = 0.0d;
private void btnOkClick(String type, double price, int num) {
CashContext cc = new CashContext(type);
double totalPrices = 0.0d;
totalPrices = cc.GetResult(price * num);
total = total + totalPrices;
System.out.println("单价: " + price + " 数量: " + num + " 合计: " + total);
}
}
public static void main(String[] args) {
Client client = new Client();
client.btnOkClick("正常收费", 333, 2);
client.btnOkClick("满300返100", 300, 10);
client.btnOkClick("打8折", 500, 4);
}
}
策略模式
最新推荐文章于 2024-01-07 21:40:30 发布
本文介绍了一种使用策略模式实现的灵活收费系统。通过定义一系列算法,并将每个算法封装起来,使它们可以互相替换,系统能够在运行时选择并使用合适的算法。文章详细解释了正常收费、打折收费和返利收费三种策略的具体实现。
7万+

被折叠的 条评论
为什么被折叠?



