枚举 + 工厂的策略模式
目的:解决多个 if 语句的低扩展维护性能
关键:行为相同的方法使用接口定义
例如:多种支付接口
问题很显然在加入新的支付平台的时候
不便于维护
方案一:使用map将各个支付操作封装,任意替换
定义共同的接口和不同的实现:
请求中接受到需要调用的支付接口时从map中取出对应的实现类加载执行
写一个简单的Controller测试
测试
对于后期的维护只需要在统一的接口下写新的调用类就行了,然后添加map
方案二:(用Enum代替map)
就速度上来说如果map的key是Enum类型的话,那么建立EnumMap会比直接使用map的速度更快( 它在内部以一个非常紧凑的数组存储value,并且根据
enum
类型的key直接定位到内部数组的索引,并不需要计算hashCode()
,不但效率最高,而且没有额外的空间浪费, 使用EnumMap
的时候,根据面向抽象编程的原则,应持有Map
接口 )
这里使用的只是单纯的Enum,开始
接口和三个实现类保持不变,策略模式的基本就是接口嘛
建立枚举
按照map的k、v对来理解就行了
使用工厂模式生产对应的支付接口(给一个Code零件,根据枚举类型定位到对应的产品(Code的实现类))
建立上下文的连接,Context
写一个Controller测试一下
枚举类分别是ALI_PAY
、WEI_PAY
、BANK_PAY
值对应各个具体支付接口的实现
使用策略模式就很好的解决了多个if的问题,减少以后代码维护的不必要的麻烦,增加可扩展性
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 雅!
评论