Spring IOC降低耦合的原因

这篇具有很好参考价值的文章主要介绍了Spring IOC降低耦合的原因。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 就是利用工厂模式+反射实现自动生产对象,管理对象生命周期的功能。降低了代码的耦合。

3、总结

依赖注入的意思是你需要的东西不是由你创建的,而是第三方,或者说容器提供给你的。这样的设计符合正交性,即所谓的松耦合。它是调用者仅通过声明某个组件就可以获得组件的控制权,而对该组件的依赖关系管理、查找、加载由外部完成。它是你不用关心对象的生命周期,什么时候被创建,什么时候销毁,只需直接使用即可,对象的生命周期由提供依赖注入的框架来管理
依赖注入的好处包括:
1、降低耦合度:通过依赖注入,对象之间的依赖关系被解耦出来,从而降低了对象之间的耦合度,使得应用程序更加灵活、可扩展和易于维护。
2、提高代码复用性:通过依赖注入,可以避免在多个地方重复创建相同的对象,提高了代码的复用性。
3、简化代码:通过依赖注入,可以使得应用程序代码更加简洁、清晰,从而降低了代码的复杂度。
4、易于测试:通过依赖注入,可以方便地进行单元测试和集成测试,从而提高了测试的效率和质量。
5、支持AOP:通过依赖注入,可以支持AOP编程,从而实现横切关注点的统一处理。文章来源地址https://www.toymoban.com/news/detail-502502.html

到了这里,关于Spring IOC降低耦合的原因的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么单片机可以直接烧录程序的原因是什么?

    单片机(Microcontroller)可以直接烧录程序的原因主要有以下几点: 集成性:单片机是一种高度集成的芯片,内部包含了处理器核心(CPU)、存储器(如闪存、EEPROM、RAM等)、输入/输出接口(如GPIO、UART、SPI、I2C等)以及时钟电路等功能模块。这种高度集成的设计使得单片机能

    2024年02月16日
    浏览(53)
  • 为什么努力学模电依然学不好的原因?

    目录 第一:网友们是这么看模电的: 第二:对抽象能力要求高 第三:缺乏工程思想 第四:缺乏系统的学习 第五:知识系统庞大 第六:克服心理因素 第七:保持钻研精神 第八:学会利用身边各种资源 第九:先对一个领域入手,慢慢深入 模电想必是近来小伙伴们很头疼的一

    2023年04月08日
    浏览(49)
  • 为什么我的小程序审核不通过?常见原因及解决方法

    作为程序员、小程序的开发者,工作中比开发小程序还要让人头疼的事,也就只有就是让小程序通过审核了!每隔三五天,总会看到有同行在社区吐槽“吐槽下微信小程序审核机制”、“微信小程序审核不通过 放弃了,细数坑坑”。。。 认证费问题 在讲小程序审核问题之前

    2024年02月10日
    浏览(41)
  • 程序员为什么不喜欢关电脑?揭秘背后的原因与“英雄”本色

    在许多人眼中,程序员似乎总是与电脑形影不离,甚至深夜时分,他们的电脑屏幕也依旧亮着。那么,为什么程序员们似乎从不喜欢关电脑呢?今天,就让我们一起走进程序员的世界,揭秘这背后的原因,看看他们真正的“英雄”本色! 在程序员的日常工作中,保持流畅且不

    2024年02月19日
    浏览(50)
  • Redis为什么能抗住10万并发?揭秘性能优越的背后原因

    Redis是一个开源的,基于内存的,高性能的键值型数据库。它支持多种数据结构,包含五种基本类型 String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),和三种特殊类型 Geo(地理位置)、HyperLogLog(基数统计)、Bitmaps(位图),可以满足各种应用场

    2023年04月13日
    浏览(43)
  • 为什么SSL会握手失败?SSL握手失败原因及解决方案

    随着网络安全技术的发展,SSL证书作为网站数据安全的第一道防线,被越来越多的企业选择。SSL证书使用的是SSL协议,而SSL握手是SSL协议当中最重要的一部分。当部署SSL证书时,如果服务器和客户端之间无法建立安全连接,就会发生SSL握手失败的情况。本文将为您解释导致

    2024年02月21日
    浏览(40)
  • 为什么网页打不开? 网页打不开的原因与解决办法小结

    下面分析下引起此种故障的原因及解决方法:        部分网站为什么网页打不开的故障可能是有时候由于域名重新解析过后,但在本机访问域名的时候还是指向原来的IP,这主要是因为本地dns缓存导致的,因为你在改域名解析之前访问过这个域名。解决方法就是更新DNS!一种

    2024年02月05日
    浏览(45)
  • 什么是 Spring?为什么学它?

    欢迎来到本篇文章!在这里,我将带领大家快速学习 Spring 的基本概念,并解答两个关键问题:什么是 Spring,以及为什么学习 Spring。 废话少说,下面,我们开始吧! Spring 官方文档:https://docs.spring.io/spring-framework/docs/5.2.24.RELEASE/spring-framework-reference/ 简化我们的企业级应用程

    2024年02月06日
    浏览(33)
  • 为什么连上无线路由器后,电脑网速变慢了的原因解析

    最近回答了好几个网友在百度知道里关于路由器的设置方面的问题,特别是关于原来没有通过路由器上网的用户,在用上了路由器后发现网速变慢呢?为什么呢?最有可能的原因是路由器的带宽有个默认值,好像是512KKB/S也就是4M,现在大城市的小区都拉光纤了,10M,20M都有,

    2024年02月06日
    浏览(41)
  • Spring为什么默认是单例的?

    目录 一、五种作用域 二、单例bean与原型bean的区别  三、单例Bean的优势与劣势 一、五种作用域 1.singleton: singleton是Spring Bean的 默认作用域 ,也就是单例模式。在整个应用程序中,只会创建一个实例,Bean的所有请求都会共享这个实例。 2.prototype: prototype表示 原型模式 ,每次

    2024年02月07日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包