10分钟理解依赖注入
看到網(wǎng)絡(luò)上很多“依賴(lài)注入”解釋的話(huà)題,這篇博客呢也只是我自己的觀點(diǎn),如果你有不同的觀點(diǎn)請(qǐng)拍磚,不用客氣。
業(yè)務(wù)場(chǎng)景
小明要去旅游,但是還未確定以什么方式出游,有可能是徒步旅行,也有可能是自駕游。
代碼演示
根據(jù)步行和駕車(chē)的速度來(lái)考慮距離旅游目的地的路程,所以這里定義了兩個(gè)屬性$speed和$distance。所有有了如下代碼:
interface travelInterface{public function __construct($speed, $distance);public function run(); }abstract class travel implements travelInterface{protected $speed; // 最高時(shí)速protected $distance; // 最遠(yuǎn)路程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 "徒步旅行";} }如果是選擇自駕游
class human {protected $travel; // 出行方式public function __construct(){$this->travel = new drive(60,1000);}public function traveling(){$this->travel->run();} }$xiaoming = new human(); $xiaoming->traveling();
那么,如果需要換一種出行方式的時(shí)候,則需要修改human類(lèi)。這里看起來(lái)修改非常簡(jiǎn)單,但是我們實(shí)際項(xiàng)目中可能會(huì)夾雜著很多的業(yè)務(wù)邏輯一起修改。
就說(shuō)下依賴(lài)注入的基礎(chǔ)方式
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();什么是依賴(lài)注入
簡(jiǎn)單的說(shuō):在A類(lèi)中使用了B類(lèi)的實(shí)例時(shí),B對(duì)象的構(gòu)造不是在A類(lèi)某個(gè)方法中初始化的,而是在A類(lèi)外部初始化之后以B類(lèi)的對(duì)象傳入進(jìn)來(lái)。這個(gè)過(guò)程就是依賴(lài)注入。
換一種通過(guò)配置文件來(lái)實(shí)現(xiàn)控制反轉(zhuǎn)
$config = ["travel" => drive::class, ];$travel = new $config["travel"](60,1000); $xiaoming = new human($travel); $xiaoming->traveling();通過(guò)上面的方式,以什么方式旅行,只需要修改配置$config就行。
這在我們PHP里感觸不明顯,覺(jué)得修改$config和修改$travel = new drive(60,1000)差別不到,一方面是便于管理,另一方面是PHP的非編譯型的特性?xún)?yōu)勢(shì)。如果用Java來(lái)實(shí)現(xiàn),感觸就非常明顯了,比如程序已經(jīng)打包了,只需要修改配置文件,就可以控制類(lèi)的依賴(lài)關(guān)系了。起到了解耦的作用。
雖然很多時(shí)候大家一說(shuō)到控制反轉(zhuǎn),依賴(lài)注入,就非要和說(shuō)到反射,我覺(jué)得上面IOC只是一種思想,具體的實(shí)現(xiàn)方式,在不同的語(yǔ)言中有不同的表現(xiàn)形式。只要將這種依賴(lài)關(guān)系解耦出來(lái),可以配置化就是IOC的實(shí)現(xiàn)了。
原文地址:https://mengkang.net/790.html
總結(jié)
以上是生活随笔為你收集整理的10分钟理解依赖注入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: zabbix系列(四)Zabbix3.0
- 下一篇: Servlet开发(二)