打字猴:1.700482204e+09
1700482204
1700482205 //自由扣款
1700482206
1700482207 public boolean exec(Card card,Trade trade){
1700482208
1700482209 //直接从自由余额中扣除
1700482210
1700482211 card.setFreeMoney(card.getFreeMoney()-trade.getAmount());
1700482212
1700482213 return true;
1700482214
1700482215 }
1700482216
1700482217 }
1700482218
1700482219 卡内的自由金额减去交易金额再修改卡内自由金额就完事了,异常情况不考虑。这两个具体的策略与我们的交易类型没有任何关系,也不应该有关系,策略模式就是提供两个可以相互替换的策略,至于在什么时候使用什么策略,则不是由策略模式来决定的。策略模式还有一个角色没出场,即封装角色,如代码清单35-6所示。
1700482220
1700482221 代码清单35-6 扣款策略的封装
1700482222
1700482223 public class DeductionContext{
1700482224
1700482225 //扣款策略
1700482226
1700482227 private IDeduction deduction=null;
1700482228
1700482229 //构造函数传递策略
1700482230
1700482231 public DeductionContext(IDeduction_deduction){
1700482232
1700482233 this.deduction=_deduction;
1700482234
1700482235 }
1700482236
1700482237 //执行扣款
1700482238
1700482239 public boolean exec(Card card,Trade trade){
1700482240
1700482241 return this.deduction.exec(card,trade);
1700482242
1700482243 }
1700482244
1700482245 }
1700482246
1700482247 典型的策略上下文角色。扣款模块的策略已经定义完毕了,然后需要想办法解决策略模式的缺陷:它把所有的策略类都暴露出去,暴露得越多以后的修改风险也就越大。怎么修改呢?增加一个映射配置文件,实现策略类的隐藏。我们使用枚举担当此任,对策略类进行映射处理,避免高层模块直接访问策略类,同时由工厂方法模式根据映射产生策略对象,类图如图35-3所示。
1700482248
1700482249
1700482250
1700482251
1700482252 图35-3 策略工厂类图
1700482253
[ 上一页 ]  [ :1.700482204e+09 ]  [ 下一页 ]