** * @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 发布