Laravel框架中控制反转和依赖注入功能是怎么实现的?
其实控制反转和依赖注入是一种设计思想,它最早源于Java Spring框架设计中的机制,所以身边如果有做Java开发的小伙伴~简单聊聊就能明白许多。
1.依赖注入
依赖注入(Dependency Injection),通俗的解释是当我们构建对象时需要的参数,只要不是手动创建而是以实例对象的形式注入都可以称为依赖注入。
举个例子,一个小游戏中玩家可以创建不同的职业。
1 | // 职业接口 |
以上是创建玩家角色的逻辑,创建角色“player1”
时选择角色“dh”
,那么这种方式其实就是依赖注入。
2.控制反转(Ioc)
控制反转(Inversion of Control),从字面意思来理解就是把控制权反转,那么究竟怎么反转呢?
之前创建玩家角色的逻辑,通过程序可以看出所有依赖对象都是程序主动去创建(职业对象,玩家对象)。那么如果我们想把所有需要的参数都提前准备好,怎么优化?
1 | class Container |
加入了一个名叫“Container”
的类,里面存放提前设计好的对象,当程序需要某些依赖对象时“Container”
自动帮你去寻找执行。这其实就是
Ioc设计思想中遵循“Don’t call us, we’ll call you”的原则,不需要程序去创建依赖,而是主动去帮程序寻找相应依赖。这也就是所说的控制反转,从狭义上讲依赖注入其实算是控制反转的一种实现。
最后
可能很多小伙伴会觉得控制反转的思想和工厂模式很相像,它们是不是就是同一个东西呢?有兴趣的小伙伴可以去看看Dependency Injection vs Factory Pattern。