通过商场促销来说明策略模式和简单工厂模式的合用例子,例子如下:
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));
}
}