简单的例子理解依赖注入(PHP)
来源:互联网 发布:明星字体软件 编辑:程序博客网 时间:2024/06/05 04:48
简单的例子理解依赖注入(PHP)
最近在学习laravel框架,其中多次提到依赖注。之前对依赖注入只有一个模糊的概念,并没有明确的认识,打算借这次机会深入学习一下。
我的理解 依赖注入就是依赖类不应该自己实例被依赖的类,应该将实例化被依赖类的工作交给外部容器来进行。
主要的 目的就是实现 控制反转,而控制反转的目的就是 解耦。
而解耦的目的就是使代码”面向需求“、”拥抱变化“。
我们用一个例子来理解,
我们设定一个简单的前提:成为士兵(soldier)有一个条件,就是要拥有一把剑(sword)。
我们抽象成代码:
紧耦合的情况
基本情况
剑的类:
class Sword{ public function useSword() { echo '冲啊~~~!<br/>'; }}
士兵的类:
class Soldier{ //士兵的武器 public $sword; public function __construct() { $this->sword = new Sword(); } //战斗 public function fight() { //挥舞剑 $this->sword->useSword(); }}
当士兵应征的时候:
//征兵$soldier1 = new Soldier();$soldier2 = new Soldier();//上战场$soldier1->fight();$soldier2->fight();
被依赖的类发生变更时
当剑(sword)的结构发生变更时,比如说添加了一个属性长度(length)而且我们需要在实例化剑(sword)的时候给出长度(length)时,我们不但要修改Sword类的代码,也要修改Soldier类的代码。
如下代码:
剑的类:
class Sword{ //剑的长度 public $length; public function __construct($length) { $this->length = $length; } public function useSword() { echo '冲啊~~~!<br/>'; }}
士兵的类:
class Soldier{ //士兵的武器 public $sword; public function __construct($length) { $this->sword = new Sword($length); } //战斗 public function fight() { //挥舞剑 $this->sword->useSword(); }}
当士兵应征的时候:
//征兵$soldier1 = new Soldier(20);$soldier2 = new Soldier(100);//上战场$soldier1->fight();$soldier2->fight();
所以说,每一次我们带边剑(Sword)的结构(比如说添加材质属性,添加制作工艺)都会影响到士兵(Soldier)。
依赖注入的情况下
但是在使用 依赖注入的情况下,就会不会发生这样的情况:
剑的类:
class Sword{ public function useSword() { echo '冲啊~~~!<br/>'; }}
士兵的类:
class Soldier{ //士兵的武器 public $sword; public function __construct(Sword $sword) { $this->sword = $sword; } //战斗 public function fight() { //挥舞剑 $this->sword->useSword(); }}
当士兵应征的时候:
//制作剑$sword1 = new Sword(20);$sword2 = new Sword(100);//征兵$soldier1 = new Soldier($sword1);$soldier2 = new Soldier($sword2);//上战场$soldier1->fight();$soldier2->fight();
我们可以看到剑(Sword)是我们在外部实例化之后注入给士兵(Soldier)的,他们之间被完全解耦了,无论剑的需求发生什么样的扩展(变更),只要可以战斗(useSword)都不会影响士兵。
这样就达到了’拥抱变化’的目的,同时也更方便测试。
阅读全文
0 0
- 简单的例子理解依赖注入(PHP)
- PHP依赖注入简单理解
- 依赖注入的简单理解
- 简单的理解依赖注入
- 简单的Spring依赖注入例子~~
- 简单的Spring依赖注入例子~~
- Spring简单的依赖注入例子
- 简单的Spring依赖注入例子~~
- 理解PHP 依赖注入
- Spring依赖注入简单例子
- php依赖注入相关理解
- 简单初步理解依赖注入
- 依赖注入的理解
- JSF 简单的JSF实现依赖注入的例子
- 一起学spring--依赖注入---简单粗暴的例子展示
- 对PHP中依赖注入和控制反转的理解
- Spring.net 依赖注入 简单例子
- yii2 随笔(七)依赖注入——(2)php依赖注入的简单实现
- Android Studio2.2 用CMakeLists 进行NDK开发遇到的坑
- 素数
- 一元线性回归分析及java实现
- 使用faster_rcnn训练自己的数据
- DIV+CSS规范命名大全集合
- 简单的例子理解依赖注入(PHP)
- 音频降噪
- 括号配对问题
- 创建了对嵌入的互操作程序集间接引用,无法嵌入互操作类型
- Android中的Http通信(一)之Http协议基本知识
- 在父类里不包括最后一位子类的margin-bottom
- jQuery判断复选框是否选中
- [NOIP提高组2002]矩形覆盖
- hdu1280