}
}
扣款策略封装
[java]
public class DeductionContext {
private IDeduction deduction;
public DeductionContext(IDeduction deduction) {
this.deduction = deduction;
}
public boolean exec(Card card, Trade trade) {
return this.deduction.exec(card, trade);
}
}
public class DeductionContext {
private IDeduction deduction;
public DeductionContext(IDeduction deduction) {
this.deduction = deduction;
}
public boolean exec(Card card, Trade trade) {
return this.deduction.exec(card, trade);
}
}
策略枚举
[java]
public enum StrategyManage {
SteadyDeduction("org.apache.java.designpatter.factoryandstrategy.SteadyDeduction"),
FreeDeducation("org.apache.java.designpatter.factoryandstrategy.FreeDeduction");
String value = "";
private StrategyManage(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
public enum StrategyManage {
SteadyDeduction("org.apache.java.designpatter.factoryandstrategy.SteadyDeduction"),
FreeDeducation("org.apache.java.designpatter.factoryandstrategy.FreeDeduction");
String value = "";
private StrategyManage(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
策略工厂
[java]
public class StrategyFactory {
public static IDeduction getDeduction(StrategyManage strategy) {
IDeduction deduction = null;
try {
deduction = (IDeduction) Class.forName(strategy.getValue()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return deduction;
}
}
public class StrategyFactory {
public static IDeduction getDeduction(StrategyManage strategy) {
IDeduction deduction = null;
try {
deduction = (IDeduction) Class.forName(strategy.getValue()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return deduction;
}
}
扣款模块封装
[java]
public class DeductionFacade {
public static Card deduct(Card card, Trade trade) {
StrategyManage reg = getDeducationType(trade); //获得消费策略
IDeduction deduction = StrategyFactory.getDeduction(reg); //初始化一个消费策略 对象
DeductionContext context = new DeductionContext(deduction); //执行封装
context.exec(card, trade); //执行扣款
return card;
}
private static StrategyManage getDeducationType(Trade trade) {
if (trade.getTradeNo().contains("abc")) {
return StrategyManage.FreeDeducation;
}else {
return StrategyManage.SteadyDeduction;
}
}
}
public class DeductionFacade {
public static Card deduct(Card card, Trade trade) {
StrategyManage reg = getDeducationType(trade); //获得消费策略
IDeduction deduction = StrategyFactory.getDeduction(reg); //初始化一个消费策略 对象
DeductionContext context = new DeductionContext(deduction); //执行封装
context.exec(card, trade); //执行扣款
return card;
}
private static StrategyManage getDeducationType(Trade trade) {
if (trade.getTradeNo().contains("abc")) {
return StrategyManage.FreeDeducation;
}else {
return StrategyManage.SteadyDeduction;
}
}
}
场景类
[java]
public class Client {