第一章:小明和他的手機
你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標準是產(chǎn)品質(zhì)量的保證,主要從事成都網(wǎng)站設(shè)計、網(wǎng)站制作、企業(yè)網(wǎng)站建設(shè)、成都手機網(wǎng)站制作、網(wǎng)頁設(shè)計、品牌網(wǎng)站建設(shè)、網(wǎng)頁制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)建站擁有實力堅強的技術(shù)研發(fā)團隊及素養(yǎng)的視覺設(shè)計專才。
從前有個人叫小明
小明有三大愛好,抽煙,喝酒…… 咳咳,不好意思,走錯片場了。應該是逛知乎、玩王者農(nóng)藥和搶微信紅包
小明的三大愛好
我們用一段簡單的偽代碼,來制造一個這樣的小明
class Ming extends Person { private $_name; private $_age; function read() { //逛知乎 } function play() { //玩農(nóng)藥 } function grab() { //搶紅包 } }
但是,小明作為一個人類,沒有辦法僅靠自己就能實現(xiàn)以上的功能,他必須依賴一部手機,所以他買了一臺iphone6,接下來我們來制造一個iphone6
class iPhone6 extends Iphone { function read($user="某人") { echo $user."打開了知乎然后編了一個故事 \n"; } function play($user="某人") { echo $user."打開了王者農(nóng)藥并送起了人頭 \n"; } function grab($user="某人") { echo $user."開始搶紅包卻只搶不發(fā) \n"; } }
小明非常珍惜自己的新手機,每天把它牢牢控制在手心里,所以小明變成了這個樣子
class Ming extends Person { private $_name; private $_age; public function __construct() { $this->_name = '小明'; $this->_age = 26; } function read() { //…… 省略若干代碼 (new iPhone6())->read($this->_name); //逛知乎 } function play() { //…… 省略若干代碼 (new iPhone6())->play($this->_name);//玩農(nóng)藥 } function grab() { //…… 省略若干代碼 (new iPhone6())->grab($this->_name);//搶紅包 } }
今天是周六,小明不用上班,于是他起床,并依次逛起了知乎,玩王者農(nóng)藥,并搶了個紅包。
$ming = new Ming(); //小明起床 $ming->read(); $ming->play(); $ming->grab();
這個時候,我們可以在命令行里看到輸出如下
小明打開了知乎然后編了一個故事
小明打開了王者農(nóng)藥并送起了人頭
小明開始搶紅包卻只搶不發(fā)
這一天,小明過得很充實,他覺得自己是世界上最幸福的人。
第二章: 小明的快樂與憂傷
小明和他的手機曾一起度過了一段美好的時光,一到空閑時刻,他就抱著手機,逛知乎,刷微博,玩游戲,他覺得自己根本不需要女朋友,只要有手機在身邊,就滿足了。
可誰能想到,一次次地系統(tǒng)更新徹底打碎了他的夢想,他的手機變得越來越卡頓,電池的使用壽命也越來越短,一直到某一天的寒風中,他的手機終于耐不住寒冷,頭也不回地關(guān)了機。
小明很憂傷,他意識到,自己要換手機了。
為了能獲得更好的使用體驗,小明一咬牙,剁手了一臺iphoneX,這部手機鈴聲很大,電量很足,還能雙卡雙待,小明很喜歡,但是他遇到一個問題,就是他之前過度依賴了原來那一部iPhone6,他們之間已經(jīng)深深耦合在一起了,如果要換手機,他就要拿起刀來改造自己,把自己體內(nèi)所有方法中的iphone6 都換成 iphoneX。
漫長的改造過程
經(jīng)歷了漫長的改造過程,小明終于把代碼中的 iphone6 全部換成了 iphoneX。雖然很辛苦,但是小明覺得他是快樂的。
于是小明開開心心地帶著手機去上班了,并在回來的路上被小偷偷走了。為了應急,小明只好重新使用那部剛剛被遺棄的iphone6,但是一想到那漫長的改造過程,小明的心里就說不出的委屈,他覺得自己過于依賴手機了,為什么每次手機出什么問題他都要去改造他自己,這不僅僅是過度耦合,簡直是本末倒置,他向天空大喊,我不要再控制我的手機了。
天空中的造物主,也就是作為程序員的我,聽到了他的吶喊,我告訴他,你不用再控制你的手機了,交給我來管理,把控制權(quán)交給我。這就叫做控制反轉(zhuǎn)。
第三章:造物主的智慧
小明聽到了我的話,他既高興,又有一點害怕,他跪下來磕了幾個頭,虔誠地說到:“原來您就是傳說中的造物主,巴格梅克上神。我聽到您剛剛說了 控制反轉(zhuǎn) 四個字,就是把手機的控制權(quán)從我的手里交給你,但這只是您的想法,是一種思想罷了,要用什么辦法才能實現(xiàn)控制反轉(zhuǎn),又可以讓我繼續(xù)使用手機呢?”
“呵“,身為造物主的我在表現(xiàn)完不屑以后,扔下了四個大字,“依賴注入!”
接下來,偉大的我開始對小明進行慘無人道的改造,如下
class Ming extends Person { private $_name; private $_age; private $_phone; //將手機作為自己的成員變量 public function __construct($phone) { $this->_name = '小明'; $this->_age = 26; $this->_phone = $phone; echo "小明起床了 \n"; } function read() { //…… 省略若干代碼 $this->_phone->read($this->_name); //逛知乎 } function play() { //…… 省略若干代碼 $this->_phone->play($this->_name);//玩農(nóng)藥 } function grab() { //…… 省略若干代碼 $this->_phone->grab($this->_name);//搶紅包 } }
接下來,我們來模擬運行小明的一天
$phone = new IphoneX(); //創(chuàng)建一個iphoneX的實例 if($phone->isBroken()){//如果iphone不可用,則使用舊版手機 $phone = new Iphone6(); } $ming = new Ming($phone);//小明不用關(guān)心是什么手機,他只要玩就行了。 $ming->read(); $ming->play(); $ming->grab();
我們先看一下iphoneX 是否可以使用,如果不可以使用,則直接換成iphone6,然后喚醒小明,并把手機塞到他的手里,換句話說,把他所依賴的手機直接注入到他的身上,他不需要關(guān)心自己拿的是什么手機,他只要直接使用就可以了。
這就是依賴注入。
第四章:小明的感悟
小明的生活開始變得簡單了起來,而他把省出來的時間都用來寫筆記了,他在筆記本上這樣寫到
我曾經(jīng)有很強的控制欲,過度依賴于我的手機,導致我和手機之間耦合程度太高,只要手機出現(xiàn)一點點問題,我都要改造我自己,這實在是既浪費時間又容易出問題。自從我把控制權(quán)交給了造物主,他每天在喚醒我以前,就已經(jīng)替我選好了手機,我只要按照平時一樣玩手機就可以了,根本不用關(guān)心是什么手機。即便手機出了問題,也可以由造物主直接搞定,不需要再改造我自己了,我現(xiàn)在買了七部手機,都交給了造物主,每天換一部,美滋滋!
我也從其中獲得了這樣的感悟: 如果一個類A 的功能實現(xiàn)需要借助于類B,那么就稱類B是類A的依賴,如果在類A的內(nèi)部去實例化類B,那么兩者之間會出現(xiàn)較高的耦合,一旦類B出現(xiàn)了問題,類A也需要進行改造,如果這樣的情況較多,每個類之間都有很多依賴,那么就會出現(xiàn)牽一發(fā)而動全身的情況,程序會極難維護,并且很容易出現(xiàn)問題。要解決這個問題,就要把A類對B類的控制權(quán)抽離出來,交給一個第三方去做,把控制權(quán)反轉(zhuǎn)給第三方,就稱作控制反轉(zhuǎn)(IOC Inversion Of Control)。控制反轉(zhuǎn)是一種思想,是能夠解決問題的一種可能的結(jié)果,而依賴注入(Dependency Injection)就是其最典型的實現(xiàn)方法。由第三方(我們稱作IOC容器)來控制依賴,把他通過構(gòu)造函數(shù)、屬性或者工廠模式等方法,注入到類A內(nèi),這樣就極大程度的對類A和類B進行了解耦。
名稱欄目:php如何實現(xiàn)解耦
本文來源:http://vcdvsql.cn/article18/pphsgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、網(wǎng)站排名、微信公眾號、外貿(mào)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、響應式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)