面向过程编程
初学者编程时多半采用直接耦合的方式编程,即在类中直接new一个对象,或者将代码逻辑大段的写在一个方法里,有点儿类似于面向过程。
问题出现
这样虽然可以满足当下的需求,但是一旦需求变化,比如:
场景一:覆盖
PD提了新的需求,这时需要增加一个新的逻辑替代原有逻辑,则需要手动覆盖大段原代码;
场景二:动态调用
需要是要动态调用不同的实现逻辑以满足新需求,这时代码中可能会多出不少if else。
面向接口编程
场景一:覆盖
当一个接口有多个实现类,需要通过name注入的方式指定某个实现类,否则报错。name注入的方式:1.@AutoWired+@Qualifier("helloService") 2.@Resource(name="helloService")
场景二:动态调用
可以用map存储该接口的所有实现类,map中的值初始化可以采用:
Map<String, TrafficMode> map = applicationContext.getBeansOfType(TrafficMode.class);
map可以放到某个factory的成员变量中,这时map中就装有了所有实现类,调用时根据参数动态调用即可。
参考链接:https://www.imooc.com/article/17263