10分钟理解依赖注入
2017-06-06 09:44
344 查看
看到网络上很多“依赖注入”解释的话题,这篇博客呢也只是我自己的观点,如果你有不同的观点请拍砖,不用客气。
业务场景
小明要去旅游,但是还未确定以什么方式出游,有可能是徒步旅行,也有可能是自驾游。
代码演示
根据步行和驾车的速度来考虑距离旅游目的地的路程,所以这里定义了两个属性speed和distance。所有有了如下代码:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
下面是选择自驾游的代码
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
那么,如果需要换一种出行方式的时候,则需要修改human类。这里看起来修改非常简单,但是我们实际项目中可能会夹杂着很多的业务逻辑一起修改。
就说下依赖注入的基础方式
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
什么是依赖注入。
简单的说:在A类中使用了B类的实例时,B对象的构造不是在A类某个方法中初始化的,而是在A类外部初始化之后以B类的对象传入进来。这个过程就是依赖注入。
换一种通过配置文件来实现控制反转
2
3
4
5
6
7
1
2
3
4
5
6
7
通过上面的方式,以什么方式旅行,只需要修改配置config就行。
这在我们<a href="http://lib.csdn.net/base/php" class='replace_word' title="PHP知识库" target='_blank' style='color:#df3434; font-weight:bold;'>PHP</a>里感触不明显,觉得修改config和修改$travel = new drive(60,1000)差别不到,一方面是便于管理,另一方面是PHP的非编译型的特性优势。如果用Java来实现,感触就非常明显了,比如程序已经打包了,只需要修改配置文件,就可以控制类的依赖关系了。起到了解耦的作用。
你可以关注千锋PHP查看更多实用的文章,虽然很多时候大家一说到控制反转,依赖注入,就非要和说到反射,我觉得上面IOC只是一种思想,具体的实现方式,在不同的语言中有不同的表现形式。只要将这种依赖关系解耦出来,可以配置化就是IOC的实现了。
转载需注明来源,本文来源:https://www.phpxy.com/article/200.html
业务场景
小明要去旅游,但是还未确定以什么方式出游,有可能是徒步旅行,也有可能是自驾游。
代码演示
根据步行和驾车的速度来考虑距离旅游目的地的路程,所以这里定义了两个属性speed和distance。所有有了如下代码:
interface travelInterface{ public function __construct($speed, $distance); public function run(); } abstract class travel implements travelInterface{ protected $speed; // 最高时速 protected $distance; // 最远路程 public function __construct($speed, $distance) { $this->speed = $speed; $this->distance = $distance; } } class drive extends travel{ public function run() { echo "自驾游"; } } class walk extends travel{ public function run() { echo "徒步旅行"; } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
下面是选择自驾游的代码
class human { protected $travel; // 出行方式 public function __construct() { $this->travel = new drive(60,1000); } public function traveling(){ $this->travel->run(); } } $xiaoming = new human(); $xiaoming->traveling();1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
那么,如果需要换一种出行方式的时候,则需要修改human类。这里看起来修改非常简单,但是我们实际项目中可能会夹杂着很多的业务逻辑一起修改。
就说下依赖注入的基础方式
class human { protected $travel; // 出行方式 public function __construct(travel $travel) { $this->travel = $travel; } public function traveling(){ $this->travel->run(); } } $travel = new drive(60,1000); $xiaoming = new human($travel); $xiaoming->traveling();1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
什么是依赖注入。
简单的说:在A类中使用了B类的实例时,B对象的构造不是在A类某个方法中初始化的,而是在A类外部初始化之后以B类的对象传入进来。这个过程就是依赖注入。
换一种通过配置文件来实现控制反转
$config = [ "travel" => drive::class, ]; $travel = new $config["travel"](60,1000); $xiaoming = new human($travel); $xiaoming->traveling();1
2
3
4
5
6
7
1
2
3
4
5
6
7
通过上面的方式,以什么方式旅行,只需要修改配置config就行。
这在我们<a href="http://lib.csdn.net/base/php" class='replace_word' title="PHP知识库" target='_blank' style='color:#df3434; font-weight:bold;'>PHP</a>里感触不明显,觉得修改config和修改$travel = new drive(60,1000)差别不到,一方面是便于管理,另一方面是PHP的非编译型的特性优势。如果用Java来实现,感触就非常明显了,比如程序已经打包了,只需要修改配置文件,就可以控制类的依赖关系了。起到了解耦的作用。
你可以关注千锋PHP查看更多实用的文章,虽然很多时候大家一说到控制反转,依赖注入,就非要和说到反射,我觉得上面IOC只是一种思想,具体的实现方式,在不同的语言中有不同的表现形式。只要将这种依赖关系解耦出来,可以配置化就是IOC的实现了。
转载需注明来源,本文来源:https://www.phpxy.com/article/200.html
相关文章推荐
- 10分钟快速理解依赖注入
- 10分钟快速理解依赖注入
- 10分钟快速理解依赖注入
- 10分钟快速理解依赖注入
- 10分钟快速理解依赖注入
- 10分钟快速理解依赖注入
- Spring4深入理解01----Bean配置(依赖注入和控制反转的区别)
- 轻松理解 Java开发中的依赖注入(DI)和控制反转(IOC)
- 【Spring】Spring依赖注入与控制反转理解
- 依赖注入和控制反转的理解,写的太好了。
- 7.3.1: 理解依赖注入
- 依赖注入和控制反转的理解,写的太好了。
- 依赖注入 理解Dependency Injection
- 关于spring依赖注入到普通类中为null的情况解决理解方案
- Spring 学习总结(一)依赖注入的理解
- Spring IOC(依赖注入、控制反转)概念理解
- 关于Spring的控制反转、依赖注入等的理解
- 依赖注入与控制反转的理解
- 理解Spring中的依赖注入和控制反转
- 依赖注入的理解