扣款策略接口 Deduction
exec 执行本策略扣款策略1 implements 扣款策略接口
实现exec策略逻辑扣款策略2 implements 扣款策略接口
扣款策略执行器
构造函数传入Deduction接口
exec:调用 deduction.exec策略枚举:外部传枚举值,找到对应的策略实现子类
工厂类 StrategyFactory
getDeduction:接受枚举参数,通过枚举里的子类名属性,反射实例化子类
deduction = StrategyFactory.getDeduction(enum); // 通过枚举类获取对应的策略子类
context = new Context(deduction);
context.exec(); // 执行策略
总结
策略模式封装了容易变化的逻辑部分,自由切换应对不同场景,而且扩展性好。
工厂模式
- 避免策略实现子类对外直接暴露,因为外部调用策略是直接依赖实现子类传递给context的
- 外部通过传递一个类似枚举,作为映射到策略子类的key,剩下的实例化交给工厂类来做