持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
前言
上次讲了,在一个接口有多个实现类的时候,我们为了方便注入,利用多个实现类实现接口的方式,将接口注入进来,使用接口调用方法。这里就提到了面向接口编程,上次讲了用枚举实现,具体参考juejin.cn/post/710262… 今天我们试一下另一种方式实现:利用工厂实现。
实现方式
首先还是一个接口两个实现类,但是接口中增加了一个方法。具体请看:
然后两个实现类分别如下:
接下来,我们写一个工厂类,来保存注册的这两个实现类,并且利用这两个实现类的type来获取相应的实现类:
也可以这样写:
这个工厂类的含义是,在spring容器初始化完毕之后,扫描容器中的payment接口对应的实现类,然后遍历所有的实现类,将type和实现类以key-value的形式存入到内存map中,在使用时,传过来一个type就可以根据type拿到对应的实现类,从而调用相应的支付方式完成支付。
测试
测试方法跟之前的差不多,只不过获取不同service实现类的方式发生了改变,如下:
我们可以看到,在获取相应的实现类的时候,需要通过factory中的map来获取,这样一来,就不用每次将不同实现类注入到应用中来了。
总结
面向接口编程是一个很不错的构建思路,根据这个思路,可以解决代码臃肿,真正做到简化代码的目的。