Spring中控制反转IoC的理解,以及依赖倒置原则的理解

**Spring学习:

控制反转(Inversion of control):控制反转是一种OOD的思想,用来降低模块之间的耦合度。
在设计过程中,将设计好的对象,解析到LoC容器来进行控制,当程序执行过程中需要用到其他资源时(对象,文件,常量…)时,通过依赖注入(Dependency injection)将需要的资源对象通过控制反转到所需要的对象中去。

在不使用反转控制的程序中,“传统方式”是当我们需要用到其他对象的资源时,就直接通过“new”关键字创建一个对象。这这个过程中就容易造成对象之间关系之间依赖程度较高,导致类之间的耦合度高,不利于组件及代码的重用。对象模块之间的关系类似于下图:
Spring中控制反转IoC的理解,以及依赖倒置原则的理解_第1张图片
对象之间的依赖关系太强,一旦需要更改一个对象所在的类,其他的类对象都需要进行更改,可拓展性不高。
在下面这个例子中没有使用到loC,当客户类需要进行操作时,首先需要创建一个用户类,然后分析用户类需要一个依赖的用户信息类,然后创建用户信息类,在用户类中再创建用户信息类对象。操作过程中都是对象主动去创建需要的依赖对象。
Spring中控制反转IoC的理解,以及依赖倒置原则的理解_第2张图片

使用loC后的对象之间的关系,是一种松耦合的关系,彼此依赖关系比较小,有利于类之间的独立工作。
Spring中控制反转IoC的理解,以及依赖倒置原则的理解_第3张图片

在使用loC的过程中,对象之间的工作关系如下图:
Spring中控制反转IoC的理解,以及依赖倒置原则的理解_第4张图片
各个对象之间通过loC容器进行关联,当程序运行到需要依赖对象时,由IoC容器将所需要的依赖对象通过依赖注入注入到对象中。

在下面的例子中,当用客户端类需要运行时,直接通过向IoC获取用户类,用户类所需要的用户信息类,容器已经直接给了用户类,不需要用户类再直接去找。(loC容器类似一个中介,当对象需要一个依赖对象时,不需要自己去创建,去寻找。只需要将自己所要的对象给loC容器描述一下,loC容器就可以直接帮你找到,并注入到对象中)。
Spring中控制反转IoC的理解,以及依赖倒置原则的理解_第5张图片
在控制反转中通过loC容器通过反转来创建对象,并将依赖对象注入到对象中。反转的前提是使用XML文件将需要注入的对象向配置在文件中,在程序中通过
ClassPathXmlApplicationContext类来创建一个容器,通过容器的**.getBean()方法来创建对象。通过反射,和XML中配置对象的Id或name属性**来创建对象。

对象之间的关系:
依赖关系:依赖(Dependency)关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性的关联。在代码中,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。
Spring中控制反转IoC的理解,以及依赖倒置原则的理解_第6张图片

关联关系:在代码中通常将一个类的对象作为另一个类的成员变量来实现关联关系。老师与学生的关系中,每个老师可以教多个学生,每个学生也可向多个老师学,他们是双向关联。
Spring中控制反转IoC的理解,以及依赖倒置原则的理解_第7张图片

聚合关系:聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如,学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。
Spring中控制反转IoC的理解,以及依赖倒置原则的理解_第8张图片
组合关系:组合(Composition)关系也是关联关系的一种,也表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系,是 cxmtains-a 关系。
在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如,头和嘴的关系,没有了头,嘴也就不存在了
Spring中控制反转IoC的理解,以及依赖倒置原则的理解_第9张图片
依赖倒置原则
依赖倒置原则是Gof中的设计原则之一,阐述了模块之间的需要遵守的关联关系:
高层模块不应该依赖于低层模块,模块之间需要通过一个介质(抽象,接口)来实现关联;抽象不依赖于具体细节,具体细节依赖抽象。
依赖倒置的原则意思:面向接口和抽象的编程。
通过面向接口编程使程序中模块的依赖程度降低,达到低耦合的功能,重用性加强。

你可能感兴趣的:(面向对象分析与设计)