学到spring, 老师一定会讲: IOC能够降低耦合性,可是为啥会降低, 我的脑袋瓜子表示不李姐,呜呜呜~,这不吊我胃口吗hh😭😭
第一层 :传统方式
通常写Java程序都是通过实例化来获取对象,实例如下:
Dog dog = new Dog();
dog.woof();
注意:如果我们想把Dog换成其他的对象(例如 Cat cat = new Cat()), 换完之后, cat对象显然不一定存在woof方法,但它可能有 bark(), 那上面的程序基本要重写, 如果有10000处声明,10000调用, 今天肯定是搞不完了hh😭
第二层 : 接口
有的人肯定会说,我们约定一些公用的方法,大家去实现它,不就可以切换了吗?这就是接口
Animal animal = new Dog()
animal.bark();
注意: 如果现在我想把Dog换成Cat, 只需要将new Dog 换成 new Cat ,也就是说,如果有10000处类, 今晚加班或许就能搞定hh💪
接口能够一定程度上降低代码的耦合度
第三层 : 工厂模式
有的懒人,想为啥不能建一个既能生产Dog又能生产Cat对象的类,不就能提高效率吗?
class AnimalFactory{
AnimalFactory(){}
public static Animal getInstance(String type){
Animal result = null;
if("dog".equals(type)){
result = new Dog();
}
if("cat".equals(type)){
result = new Cat();
}
return result;
}
}
Animal animal = AnimalFactory.getInstance("dog");
animal.bark();
注意: 这种方法把创建对象交给了专业的类,只要输入我需要的参数,就能返回给我正确的对象,但它并没有解决声明语句的修改,为了替换部分程序, 10000处,大概2~3个小时就能解决😍
第四层:反射
又有懒人说, 在写程序的时候不告诉工厂需要什么,等到运行的时候再告诉工厂需要什么不就行了吗?
Animal animal = AnimalFactory.getInstance(去config中读取想要的);
animal.bark();
想要的 = dog
这样,工厂生产什么全部写在一个文件里,只需要利用反射,运行的时候生产想应得东西即可。
如果想修改想要得,只需修改配置文件里的想要的即可,很快的。另外除了配置文件,其他基本没有修改,意味着代码不需要重新编译
总结
第四层就是IOC在做的事情
IOC = 工厂模式+反射+配置文件读取(xml)
这里得工厂模式并不是真的生产对象,而是取出对象而已
所有的JavaBean都被IOC的工厂管理,需要的时候就和工厂说一声,需要XXX就可以了,这样工厂就会返回给你一个正确的对象.在不需要的时候修改工厂的生产列表(配置文件),工厂就停止生产该JavaBean了.
原文链接:https://blog.csdn.net/tinpo_123/article/details/108718367