通过商场促销来说明策略模式和简单工厂模式的合用例子,例子如下:
1、基类收费
public interface CashSuper{ public int acceptCash(int money); }2、实现基类--正常收费
public class CashNormal implements CashSuper{ @Override public int acceptCash(int money) { return money; } }
3、实现基类--打折收费
public class CashRebate implements CashSuper{ private int moneyRebate; public CashRebate(int moneyRebate) { super(); this.moneyRebate = moneyRebate; } @Override public int acceptCash(int money) { return money*moneyRebate; } public int getMoneyRebate() { return moneyRebate; } public void setMoneyRebate(int moneyRebate) { this.moneyRebate = moneyRebate; } }
4、实现基类--返利收费
public class CashReturn implements CashSuper{ private int moneyCondition; private int moneyReturn; public CashReturn(int moneyCondition, int moneyReturn) { super(); this.moneyCondition = moneyCondition; this.moneyReturn = moneyReturn; } @Override public int acceptCash(int money) { int result = money; if(money>moneyCondition){ result = money - money/moneyCondition *moneyReturn; } return result; } public int getMoneyCondition() { return moneyCondition; } public void setMoneyCondition(int moneyCondition) { this.moneyCondition = moneyCondition; } public int getMoneyReturn() { return moneyReturn; } public void setMoneyReturn(int moneyReturn) { this.moneyReturn = moneyReturn; } }5、策略实现类
public class CashContext { private CashSuper cashSuper; public CashContext(String type) { switch (type) { case "1": cashSuper = new CashNormal(); break; case "2": cashSuper = new CashReturn(200,100); break; case "3": cashSuper = new CashRebate(8); break; default: break; } } public CashSuper getCashSuper() { return cashSuper; } public void setCashSuper(CashSuper cashSuper) { this.cashSuper = cashSuper; } public int getResult(int money){ return cashSuper.acceptCash(money); } }6、测试
public class Test { public static void main(String[] args) { CashContext cashContext = new CashContext("正常收费"); System.out.println(cashContext.getResult(200)); } }