依赖注入通俗讲解

来源:互联网 发布:海贼王衣服淘宝 编辑:程序博客网 时间:2024/05/22 04:25

依赖注入通俗讲解

(1)不依赖注入的情况

下面这个例子,是不采用依赖注入的紧耦合的写法,在子弹供应商BulletProvider出现的时候,子弹才生产出来,而且生产时类型固定,如果要增加类型,则必须同时对BulletProvider和Bullet进行改造:
子弹生产商是这样干活的,

Class Bullet{    “不依赖注入的子弹,独家生产,别无他货”}

而子弹供应商是这样干活的,

    class BulletProvider{          Bullet bullet;         BulletProvider {              bullet = new Bullet();          }      }

(2)依赖注入的情况

我们期望,子弹和最终供应商无关,可以由任何子弹生产厂家提供,
//规定子弹必须具有共有属性

Interface BulletModInterface {    Public function bulletinfo()    {    }}

//生产blunt型号的子弹

Class Bluntbullet implements BulletModInterface{    Public function bulletinfo()    {        “blunt” //个性化生产1    } }

//生产sharp型号的子弹

Class Sharpbullet implements BulletModInterface{      Public function bulletinfo()      {          “sharp” //个性化生产2      } }

为了防止供应假冒伪劣产品,我们必须限定供应的bullet的属性,并且,子弹的创建,是在供应商之外,可以由任意有能力的生产厂家(比如Sharpbullet或Bluntbullet)提供,于是,我们说供应商依赖生产厂家注入了子弹。

Class BulletProvider{  Protected mod;  Public bullet(BulletModInterface mod)  {      this.mod = mod;  //确保必须是BulletModInterface  }}

//生产一颗子弹

bluntblt = new Bluntbullet;

//注入一个子弹依赖模组,也就是说,在子弹供应商出现之前,子弹就已经存在了,在供应商出现之后,子弹注入到供应商的仓库里去。

myblt = new  BulletProvider (bluntblt);

当然,程序中一般会这么写

myblt = new  BulletProvider (new Bluntbullet);

结论,传统的思路是,当子弹供应商需要子弹时,如果供应商有制造子弹的方法,就调用这个方法去制造子弹;依赖注入的思想就是,先创建子弹,在创建供应商的时候,把子弹注入进去,目的就是注入更符合自己当时使用所需要要的子弹。

OK,就这样!

原创粉丝点击