【面向对象设计】控制反转IoC

来源:互联网 发布:linux zip2.3压缩 编辑:程序博客网 时间:2024/05/22 04:31

控制反转(Inversion of Control, IoC),是面向对象变成中的一种设计原则,可以用来减少代价之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection, DI),还有一种方法依赖查找(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

起源:

大多数应用程序都是由两个或是更多的类通过彼此的合作来实现业务逻辑,这使得每个对象都需要与其合作的对象(也就是它所依赖的对象)的引用。如果这个获取过程要靠自身实现,那么这将导致代码高度耦合并且难以维护和调试。

技术描述:

Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显示的new一个B的对象。

采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来bingo注入到A类里的引用中。而具体获取的方法、对象被获取时的状态由配置文件(如XML)来指定。

实现方法:

实现控制反转主要有两种方式:依赖注入和依赖查找。两者的区别在于,前者是被动的接受对象,在类A的实例创建过程中即创建了依赖的B对象,通过类型或名称来判断将不同的对象注入到不同的不同的属性中,而后者是主动索取响应名称的对象,获得依赖对象的时间也可以在代码中自由控制。

1 依赖注入:

依赖注入有如下实现方式:

基于接口:实现特定接口以供外部容器注入所依赖类型的对象。

基于set方法:实现特定属性的public set方法,来让外部容器调用传入所依赖类型的对象。

基于构造函数:实现特定参数的构造函数,在新建对象时传入所依赖类型的对象。

基于注解:基于java的注解功能,在私有变量前加“@Autowired”等注解,不需要显示的定义以上三中代码,便可以让外部容器传入对象的容器。该方案相当于定义了public的set方法,但是因为没有真正的set方法,从而不会为了实现依赖注入导致暴露了不该暴露的借口。

2 依赖查找:

依赖查找更加主动,在需要的时候通过调用框架提供的方法来获取对象,获取时需要提供相关的配置文件路key等信息来确定获取对象的状态。

控制反转应用实例:

1 Java:

Spring Framework


0 0
原创粉丝点击