控制反转依赖倒置通俗解释
比如你是餐馆老板,你让厨师做鱼,厨师依赖盐或糖这两种调味品,做出来的鱼是甜是咸由厨师控制
现在你叫厨师做鱼,并且塞给厨师一罐糖,厨师就被你控制了,只能做糖醋鱼
就很灵活,你想吃红烧鱼的时候,给厨师盐,像参数一样,厨师就产出咸的鱼了
原来厨师依赖的糖和盐,作为参数传入了,就是依赖注入
原来是厨师类来控制产出的,变成由你来控制(通过传入依赖的操作类),就是控制反转了
可能原来新来的厨师你都要交代一句,给我做甜的
后来就不用交代了,你只要给厨师糖就行,不管哪个厨师,做出来的都是甜的
厨师就很容易替换了
和厨师交代做甜做咸相当于修改类的内部,客户每次变换口味,都要修改类的内部,给厨师糖相当于传入参数,客户换口味,只要替换给厨师的参数就好,不用改类的代码了
spring的xml配置文件里,好多都是给某个类配置入参是哪些具体的实现类的,就好像在程序启动的时候就给做鱼的厨师准备好了糖,给做肉的厨师准备好了盐
如果口味要变,只要改个xml配置就好
面向接口编程就是,告诉厨师在鱼下锅的时候用调味料(接口),具体用糖还是盐,看传入的参数
类里面只操作接口,具体接口的实现类是什么,看入参传进来的
入参传什么,类就实现成什么样