依赖耦合解耦控制反转(IOC)依赖注入

Posted 米粒3

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了依赖耦合解耦控制反转(IOC)依赖注入相关的知识,希望对你有一定的参考价值。

随着net的深入学习,出现了很多概念性的东西需要理解,现在统一记录一下。

1.依赖:现阶段在任何一个有请求作用的系统,都会出现A类调用B类的情况,这时候A类就依赖于B类,A类和B类存在依赖关系。

2.耦合、解耦:A类依赖于B类,这时对B类调用,一般通过A a=new B();的形式,不过这个时候如果B类重构(例如:增加了一个参数param1),要保证A类的正确使用,则必须重新new:A a=new B(param1); 则此时A类和B类就是耦合关系。不过带来了很多的不方便之处,如果B类频繁变动,则A类也必须同步修改,所以这时候想到了解耦(即解除这种关系,B类变动A类不用处理,交给其他类处理)。

3.IOC(Inversion of Control 控制反转):有控制反转,应该也有控制 ‘正转’ 吧,可以用网上查到的一个形象例子说明:“我”充当一个入口类,在这个入口类中,我每次去吃饭都需要主动去买一双一次性筷子(每次使用都需要new一次),让筷子乖乖的到我手里来,是“我”控制了筷子。不过呢,在现实生活中,大部分人都是很懒的,我完全可以买一双精致的筷子放到容器中(IOC)中,每次要调用时,就向容器请求,容器通过“注入"的方式给我一双筷子,这个过程中,“我”就变为了请求方,而容器变为了控制方,控制关系发生了 反转。

4.DI(Dependency Injection 依赖注入

同样接着上边的例子,筷子来到我手里的过程(即A类请求容器调用B类的过程)就是依赖注入。

 

注入大致分为 构造方法注入、接口或者抽象类注入 和 工厂方式注入。

(1).构造方法注入

public class B{

。。。

}

public class A{

       B b;       

       public A(){

           b=new B();

        }

        b.newattr="xxx";

        。。。。

}

(2).接口或者抽象类注入

public interface ICommon{

       void showMsg();

}  

public class B:ICommon

 {

        public void showMsg(){

                 console.log("我是b类的方法");

         }

 }

 public class A{

     ICommon icommon=new B();

    icommon.showMsg();

}

(3)工厂方式的注入和 (2)类似

。。。

 

以上是关于依赖耦合解耦控制反转(IOC)依赖注入的主要内容,如果未能解决你的问题,请参考以下文章

spring 依赖注入(DI)与控制反转(IOC)

IOC 控制反转IOC 简介 ( 依赖注入的两种实现方式 | 编译期注入 | 运行期注入 )

spring IOC(控制反转)及DI(依赖注入)

“依赖注入”,“控制反转”是指啥?

c#依赖注入和控制反转的书籍

控制反转,依赖注入