Spring IOC为什么能降低耦合
在学习 Spring 框架中,大家可能会遇到这种问题,为什么Spring IOC能降低耦合度?
1、什么是耦合度
耦合度是指系统中不同部分之间的依赖程度或联系紧密程度。在软件开发中,耦合度是指模块或组件之间的相互依赖程度。耦合度越高,模块之间的依赖关系越紧密,修改一个模块可能会对其他模块产生影响,系统的可维护性和可扩展性会降低。反之,耦合度越低,模块之间的依赖关系越松散,修改一个模块不会对其他模块产生影响,系统的可维护性和可扩展性会提高。
2、解析
2.1、传统方式用new创建对象
我们举个例子来分析:
最开始小明想要活下去,所以他要吃东西;
Food food = new Food();
food.eat();
小明现在吃饱了,想要玩耍;
Play play = new Play();
play.with();
小明玩耍之后想要交朋友;
Friend friend = new Friend();
friend.get();
思考时间到,我们接着往下看。
从代码上看好像没多大问题,就改了两行代码。但是我们假设对数据量进行一个扩大,不只是小明一个人,现在有1000个人都要在玩耍之后再交朋友,就需要改2000行代码,有10000个地方都这样写,就需要改20000行代码。
2.2、接口编程
经过上面的操作,小明想好到了一个好点子,我定义好一些方法,大家都按照这个规则来,不就好了。
我们给小明的各种行为定义一个接口:
public interface activity{
// 定义一个行为接口,有一个 act方法
void act();
}
小明想要吃东西就实现这个接口:
public class Food implements activity{
@Override
public void act() {
System.out.println("吃东西");
}
}
小明想要玩耍就实现这个接口:
public class Play implements activity{
@Override
public void act() {
System.out.println("去玩耍");
}
}
小明想要交朋友就实现这个接口:
public class Friend implements activity{
@Override
public void act() {
System.out.println("交朋友");
}
}
通过小明的好点子,带入上面的思考,现在有1000个人都要玩耍之后在交朋友,就需要改1000行代码,有10000个地方都这样写,就需要改10000行代码。与传统方式用new创建对象这个方法相比,现在只需要修改 new 那块就可以了,节省了许多代码量。
2.3、工厂方法
利用接口确实好一些了,但是问题还是没有解决。为了提高内聚性,负责特定的事情,所以我们使用一个类作为工厂类,既能吃东西也可以玩耍和交朋友等等。
class ActivityFactory{
ActivityFactory(){}
public static Activity getInstance(String type){
Animal result = null;
if("food".equals(type)){
result = new Food();
}
if("play".equals(type)){
result = new Play();
}
if("friend".equals(type)){
result = new Friend();
}
return result;
}
}
Activity activity = ActivityFactory.getInstance("food");
activity.act();
这种方法把创建对象的过程交给了一个工厂类,我只需要告诉他我需要什么(参数),他就会返回给我正确的对象,解决了内聚性的问题。大家想一想这种方法还有什么不足自处?大家想的没错,我们还是需要自己声明,例如小明吃饭后要玩耍,我还是需要去将参数从food替换为play。
用此方法的好处:
1、降低耦合度:工厂类可以将对象的创建和使用分离,降低了类之间的耦合度,使得系统更加灵活。
2、提高代码复用性:通过工厂类创建对象,可以避免在多个地方重复创建相同的对象,提高了代码的复用性。
3、简化代码:工厂类可以封装对象的创建过程,使得客户端不需要了解对象的创建细节,从而简化了代码。
4、易于维护:如果需要修改对象的创建方式,只需要修改工厂类即可,而不需要修改客户端代码,从而降低了维护成本。
5、可以实现多态:工厂类可以返回不同类型的对象,从而实现多态,提高了系统的灵活性和扩展性。
2.4、反射
后来小明想到一个更绝妙的主意,我在写程序的时候不告诉工厂类我需要什么,等到运行的时候我再告诉工厂类我需要什么,再利用反射技术给我生产出来。
Activity activity = ActivityFactory.getInstance(读取配置文件);
activity.act();
//小明想要的:交朋友
food.act();
大功告成,这样我要什么,都写在一个配置文件中,利用反射技术就可以创建好,这样我就不用在生产了,下次换进行其他活动的时候直接去配置文件中修改就好了,代码中不用修改。
2.5、Spring IOC
Spring IOC 就是利用工厂模式+反射实现自动生产对象,管理对象生命周期的功能。降低了代码的耦合。文章来源:https://www.toymoban.com/news/detail-502502.html
3、总结
依赖注入的意思是你需要的东西不是由你创建的,而是第三方,或者说容器提供给你的。这样的设计符合正交性,即所谓的松耦合。它是调用者仅通过声明某个组件就可以获得组件的控制权,而对该组件的依赖关系管理、查找、加载由外部完成。它是你不用关心对象的生命周期,什么时候被创建,什么时候销毁,只需直接使用即可,对象的生命周期由提供依赖注入的框架来管理。
依赖注入的好处包括:
1、降低耦合度:通过依赖注入,对象之间的依赖关系被解耦出来,从而降低了对象之间的耦合度,使得应用程序更加灵活、可扩展和易于维护。
2、提高代码复用性:通过依赖注入,可以避免在多个地方重复创建相同的对象,提高了代码的复用性。
3、简化代码:通过依赖注入,可以使得应用程序代码更加简洁、清晰,从而降低了代码的复杂度。
4、易于测试:通过依赖注入,可以方便地进行单元测试和集成测试,从而提高了测试的效率和质量。
5、支持AOP:通过依赖注入,可以支持AOP编程,从而实现横切关注点的统一处理。文章来源地址https://www.toymoban.com/news/detail-502502.html
到了这里,关于Spring IOC降低耦合的原因的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!