一、定义
策略模式定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。在实践中,可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种花边的可能性。
二、UML类图
三、实现
- 抽象算法类
package com.jthao.design.des.strategy;
public abstract class CashSuper {
public abstract double acceptCash(double money);
}
- 算法类A
package com.jthao.design.des.strategy;
public class CashNormal extends CashSuper {
@Override
public double acceptCash(double money) {
System.out.println("算法A");
return money;
}
}
- 算法类B
package com.jthao.design.des.strategy;
public class CashRebate extends CashSuper {
private double moneyRebate = 1d;
public CashRebate(String moneyRebate) {
this.moneyRebate = Double.parseDouble(moneyRebate);
}
@Override
public double acceptCash(double money) {
System.out.println("算法B");
return money * moneyRebate;
}
}
- Context转发类
package com.jthao.design.des.strategy;
public class CashContext {
CashSuper cs;
public CashContext(String type) {
switch (type) {
case "正常收费":
CashNormal cs0 = new CashNormal();
cs = cs0;
break;
case "打8折":
CashRebate cs2 = new CashRebate("0.8");
cs = cs2;
break;
}
}
public double getResult(double money) {
return cs.acceptCash(money);
}
}
- 测试类
package com.jthao.design.des.strategy;
public class StrategyTest {
public static void main(String[] args) {
CashContext cashContext = new CashContext("打8折");
System.out.println(cashContext.getResult(100));
}
}