1700482279
1700482280
类似的代码解释过很多遍了,不再多说,它就是一个登记容器,所有的具体策略都在这里登记,然后提供给工厂方法模式。策略工厂如代码清单35-8所示。
1700482281
1700482282
代码清单35-8 策略工厂
1700482283
1700482284
public class StrategyFactory{
1700482285
1700482286
//策略工厂
1700482287
1700482288
public static IDeduction getDeduction(StrategyMan strategy){
1700482289
1700482290
IDeduction deduction=null;
1700482291
1700482292
try{
1700482293
1700482294
deduction=(IDeduction)Class.forName(strategy.getValue()).newInstance();
1700482295
1700482296
}catch(Exception e){
1700482297
1700482298
//异常处理
1700482299
1700482300
}
1700482301
1700482302
return deduction;
1700482303
1700482304
}
1700482305
1700482306
}
1700482307
1700482308
一个简单的工厂,根据策略管理类的枚举项创建一个策略对象,简单而实用,策略模式的缺陷也弥补成功。那这么复杂的系统怎么让高层模块访问?(你看不出复杂?那是因为我们写的都是快乐路径,太多情况都没有考虑,在实际项目中仅就并发处理和事务管理这两部分就够你头疼了。)既然系统很复杂,是不是需要封装一下。我们请出门面模式进行封装,如代码清单35-9所示。
1700482309
1700482310
代码清单35-9 扣款模块封装
1700482311
1700482312
public class DeductionFacade{
1700482313
1700482314
//对外公布的扣款信息
1700482315
1700482316
public static Card deduct(Card card,Trade trade){
1700482317
1700482318
//获得消费策略
1700482319
1700482320
StrategyMan reg=getDeductionType(trade);
1700482321
1700482322
//初始化一个消费策略对象
1700482323
1700482324
IDeduction deduction=StrategyFactory.getDeduction(reg);
1700482325
1700482326
//产生一个策略上下文
1700482327
1700482328
DeductionContext context=new DeductionContext(deduction);
[
上一页 ]
[ :1.700482279e+09 ]
[
下一页 ]