zoukankan      html  css  js  c++  java
  • 控制反转/依赖注入的理解

    控制反转/依赖注入的好处:

    控制反转(Inversion of Control) 就是依赖倒置原则的一种代码设计的思路。具体采用的方法就是所谓的依赖注入(Dependency Injection)

    传统的思想:

    先定义四个Class,车,车身,底盘,轮胎。然后初始化这辆车,最后跑这辆车。代码结构如下:

    image

    假设我们需要改动一下轮胎(Tire)类,把它的尺寸变成动态的,而不是一直都是30。我们需要这样改:

    image

    为了让整个程序正常运行,我们需要做以下改动:

    image

    由此我们可以看到,仅仅是为了修改轮胎的构造函数,这种设计却需要修改整个上层所有类的构造函数

    所以我们需要进行控制反转(IoC),及上层控制下层,而不是下层控制着上层。我们用依赖注入(Dependency Injection)这种方式来实现控制反转。所谓依赖注入,就是把底层类作为参数传入上层类,实现上层类对下层类的“控制”。这里我们用构造方法传递的依赖注入方式重新写车类的定义:

    image

    这里我们再把轮胎尺寸变成动态的,同样为了让整个系统顺利运行,我们需要做如下修改:

    image

    这里我只需要修改轮胎类就行了,不用修改其他任何上层类。这显然是更容易维护的代码。

    什么是控制反转容器(IoC Container)呢?其实上面的例子中,对车类进行初始化的那段代码发生的地方,就是控制反转容器。

    image

    我的理解就是IOC容器就是xml的配置里对每个class的属性的配置,在xml里配置好class需要的类也就是bean

    这个容器可以自动对你的代码进行初始化,你只需要维护一个Configuration(可以是xml可以是一段代码),而不用每次初始化一辆车都要亲手去写那一大段初始化的代码。这是引入IoC Container的第一个好处。

    IoC Container的第二个好处是:我们在创建实例的时候不需要了解其中的细节。

    IoC Container在进行这个工作的时候是反过来的,它先从最上层开始往下找依赖关系,到达最底层之后再往上一步一步new:

    image

    IoC Container可以直接隐藏具体的创建实例的细节,在我们来看它就像一个工厂:

    image

  • 相关阅读:
    laravel 1对多,主键不是整型的坑
    laravel 修改默认Eloquent 映射 表名加s复数的方式
    linux开启与关闭防火墙
    laravel 队列使用(发邮件、短信等)
    linux下隐藏nginx版本及php版本信息
    laravel API开发,使用dingo/api
    80端口被占用
    中国大陆地区数据库-(省市县)总表
    未定义“RunCommand”属性
    按键精灵手机端代码通
  • 原文地址:https://www.cnblogs.com/RealGang/p/15400596.html
Copyright © 2011-2022 走看看