设计模式(java) ------ 工厂模式+策略模式+门面模式 (二)

2014-11-24 11:36:05 · 作者: · 浏览: 14

}

}
扣款策略封装


[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 {