目的:解决多个 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_PAYWEI_PAYBANK_PAY 值对应各个具体支付接口的实现

使用策略模式就很好的解决了多个if的问题,减少以后代码维护的不必要的麻烦,增加可扩展性