典型,太典型的策略上下文角色。扣款模块的策略已经定义完毕了,然后我们需要想办法解决策略模式的缺陷:它把所有的策略类都暴露出去,这不行,暴露得越多以后的修改风险也就越大(这是不是类似于女人的衣服:暴露得越多,被男同胞意淫的可能性就越大呢),怎么修改呢?增加一个映射配置文件,实现策略类的隐藏,我们使用枚举担当此任,对策略类进行映射处理,避免高层模块直接访问策略类,同时由工厂方法模式根据映射产生策略对象,解决得很优秀,类图如图35-3所示。

图35-3 策略工厂类图
又是一个简单得不能再简单的模式——工厂方法模式,通过StrategyMan负责对具体策略的映射,我们看它的代码,如代码清单35-7所示。
代码清单35-7 策略枚举
public enum StrategyMan {
SteadyDeduction("com.cbf4life.common.SteadyDeduction"),
FreeDeduction("com.cbf4life.common.FreeDeduction");
String value = "";
private StrategyMan(String _value){
this.value = _value;
}
public String getValue(){
return this.value;
}
}
SteadyDeduction("com.cbf4life.common.SteadyDeduction"),
FreeDeduction("com.cbf4life.common.FreeDeduction");
String value = "";
private StrategyMan(String _value){
this.value = _value;
}
public String getValue(){
return this.value;
}
}