亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP面向對象五大原則之依賴倒置原則(DIP)詳解

2024-05-05 00:03:07
字體:
來源:轉載
供稿:網友

本文實例講述了PHP面向對象五大原則之依賴倒置原則(DIP)。分享給大家供大家參考,具體如下:

什么是依賴倒置呢?簡單地講就是將依賴關系倒置為依賴接口,具體概念如下:

1.上層模塊不應該依賴于下層模塊,它們共同依賴于一個抽象(父類不能依賴子類,它們都要依賴于抽象類)

2.抽象不能依賴于具體,具體應該要依賴于抽象。

注意,這里的接口不是狹義的接口

為什么要依賴接口?因為接口體現對問題的抽象,同時由于抽象一般是相對穩定的或者是相對變化不頻繁的,而具體是易變的。因此依賴抽象是實現代碼擴展和運行期內綁定(多態)的基礎:只要實現了該抽象類的子類,都可以被類的使用都使用。這里,強調一下擴展性這個概念。通常擴展性指對已知行為的擴展,在講述接口時,也提到過,接口應該是相對的。這就告訴我們,無論使用多么先進的設計模式,也無法做到不需要修改代碼即可達到不變應萬變的地上。在面向對象的這五大原則里,我認為依賴倒置是最難理解,也是最難實現的。

這里以雇員類為例

<?phpinterface employee{  public function working();}class teacher implements employee{  public function working()  {    echo 'teaching...';  }}class coder implements employee{  public function working()  {    echo 'coding...';  }}class workA{  public function work()  {    $teacher = new teacher();    $teacher->working();  }}class workB{  private $e;  public function set(employee $e)  {    $this->e = $e;  }  public function work()  {    $this->e->working();  }}$worka = new workA;$worka->work();$workb = new workB;$workb->set(new teacher());$workb->work();

在workA中,work方法依賴于teacher實現;在workB中,work轉而依賴抽象,這樣可以把需要的對象通過參數傳入。上述代碼通過接口,實現了一定程度的解耦,但仍然是有限的。不僅是使用接口,使用工廠等也能實現一定程度的解耦和依賴倒置。

在workB中,teacher實例通過set方法傳入,從而實現了工廠模式。由于這樣的實現仍然是硬編碼的,為了實現代碼的進一步擴展,把這個依賴關系寫在配置文件里,指明workB需要一個teacher對象,專門由一個程序配置是否正確(如所依賴的類文件是否存在)以及加載配置中所依賴的實現,這個檢測程序,就稱為IOC容器。

很多文章里看到IOC(Inversion of Control)概念,實際上,IOC是依賴倒置原則(Dependence Inversion Principle,DIP)的同義詞。而在提IOC的時候,你可能還會看到有人提起DI等概念。DI,即依賴注入,一般認為,依賴注入(DI)和依賴查找(DS)是IOC的兩種實現。不過隨著某些概論的演化,這幾個概念之間的關系也變得很模糊,也有人認為IOC就是DI。有人認為,依賴注入的描述比起IOC來更貼切,這里不糾纏于這幾個概念之間的關系。

在經典的J2EE設計里,通常把DAO層和Servicen層細分為接口層和實現層,然后在配置文件里進行所依賴關系的配置,這是最常見的DIP的應用。Spring框架就是一個很好的IOC容器,把控制權從代碼剝離到IOC窗口,這里是通過XML配置文件實現的,Spring在執行期間根據配置文件的設定,建立對象之間的依賴關系。

如下面的代碼所示

<bean scopre="prototype" class="cn.notebook.action.NotebookListOtherAction" id="notebookListOtherAction">  <property ref="userReplyService" name="userReplyService" />  <property ref="userService" name="userService" />  <property ref="permissionService" name="permissionService" />  <property ref="friendService" name="friendService" /></bean>

但是這樣的設置一樣存在問題,配置文件會變得越來越大,其間關系會越來越復雜。同樣逃脫不了隨著應用和業務的改變,不斷修改代碼的惡魘(這里認為配置文件是代碼的一部分。并且在實際開發中,很少存在單純修改配置文件的情況。一般配置文件修改了,代碼也會做相應的修改)

在PHP里,也有類似模仿Spring的實現,即把依賴關系寫在了配置文件里,通過配置文件來產生需要的對象。我覺得這樣的代碼還是為了實現而實現。在Srping里,配置文件里配置的不僅僅是一個類運行時的依賴關系,還可以實現事務管理、AOP、延遲加載等。而PHP要實現上面的種種特性,其消耗是巨大的。從語言層面講,PHP這種動態腳本語言在實現一些多態特性上和編譯型的語言不同。其次PHP作為敏捷性的開發語言,更強調快速開發、邏輯清晰、代碼更簡單易懂,如果再附加了各種設計模式的框架,從技術實現和運行效率上來看,都是不可取的。依賴倒置的核心原則是解耦。如果脫離這個最原始的原則,那就是本末倒置。

事實上,很多的設計模式里已經隱含了依賴倒置原則我們也在有意無意地做著一些依賴反轉的工作。只是作為PHP,目前還沒有一個比較完善的IOC容器,或許是PHP根本不需要。

如果滿足DIP:

1.每個較高層次類都為它所需要的服務提出一個接口聲明,較低層次類實現實現這個接口。

2.每個高層次類都通過該抽象接口使用服務。

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产欧美日韩精品| 色多多国产成人永久免费网站| 日韩免费视频在线观看| 欧美巨大黑人极品精男| 国产热re99久久6国产精品| 国外色69视频在线观看| 成人春色激情网| 国产欧美精品日韩精品| 国产精品人成电影| 欧美日韩国产精品专区| 国产精品久久久久久久久久久新郎| 亚洲福利在线观看| 色先锋资源久久综合5566| 91精品91久久久久久| 亚洲片av在线| 久久精品色欧美aⅴ一区二区| 亚洲性视频网站| 久久成人精品一区二区三区| 欧美日韩免费观看中文| 在线免费观看羞羞视频一区二区| 欧美激情一区二区三级高清视频| 欧美日韩国产精品一区二区不卡中文| 日韩**中文字幕毛片| 欧美性视频在线| 91精品国产综合久久香蕉922| 亚洲综合在线中文字幕| 国产精品日本精品| 91国产在线精品| 成人字幕网zmw| 国产亚洲精品va在线观看| 日韩av在线免费播放| 亚洲色图第一页| 欧美日韩国产区| 日韩中文字幕免费视频| 91精品国产高清久久久久久久久| 97香蕉超级碰碰久久免费软件| 81精品国产乱码久久久久久| 亚洲区一区二区| 欧美日韩另类视频| 久久久免费精品视频| 国产精品久久久久影院日本| 精品久久香蕉国产线看观看亚洲| 欧美另类老女人| 97国产suv精品一区二区62| 91精品国产自产91精品| 久久影视三级福利片| 国产精品久久久久久久久免费| 中文字幕精品视频| 亚洲天堂成人在线视频| 亚洲精品一区二三区不卡| 2019中文字幕在线免费观看| 国产亚洲一级高清| 亚洲人成在线观看| 欧美一区二区大胆人体摄影专业网站| 91久久精品国产91久久性色| 日韩欧美中文字幕在线播放| 大荫蒂欧美视频另类xxxx| 久久国产精品亚洲| 欧美大片在线免费观看| 国产精品美女久久| 国产精品美乳在线观看| 国产精品久久久| 久久av中文字幕| 美女性感视频久久久| 亚洲人免费视频| 国产成人福利视频| 日韩精品极品在线观看播放免费视频| 亚洲国产精品va在线| 亚洲日本成人女熟在线观看| 粗暴蹂躏中文一区二区三区| 日韩av中文字幕在线播放| 韩国视频理论视频久久| 久久6免费高清热精品| 成人网欧美在线视频| 欧美男插女视频| 亚洲欧美日韩在线一区| 久久久久成人精品| 欧美日韩一区免费| 精品在线小视频| 91精品91久久久久久| 欧美日韩国产中文字幕| 亚洲国产精品福利| 国产精品永久免费观看| 国产性猛交xxxx免费看久久| 亚洲视频国产视频| 国产成+人+综合+亚洲欧美丁香花| 久久国产精品99国产精| 在线精品国产成人综合| 国产精品国产亚洲伊人久久| 国产美女精品视频| 欧美激情视频给我| 久久久欧美精品| 免费成人高清视频| 97精品视频在线播放| 亚洲精品一区在线观看香蕉| 亚洲欧洲免费视频| 亚洲精品日韩在线| 日韩最新av在线| 欧美精品video| 国产精品久久久久久久久免费看| 国产精品h在线观看| 欧美日韩国产限制| 精品国产视频在线| 91av在线免费观看| 久久九九国产精品怡红院| 亚洲在线免费视频| www.精品av.com| 国产精品福利观看| 日韩精品高清在线观看| 中文精品99久久国产香蕉| 欧美性猛交xxxx乱大交3| 亚洲欧美一区二区三区情侣bbw| 欧美日韩亚洲视频一区| 国产精品情侣自拍| 色妞色视频一区二区三区四区| 日本a级片电影一区二区| 日韩成人在线视频观看| 精品久久久国产精品999| 97欧美精品一区二区三区| 亚洲无亚洲人成网站77777| 77777少妇光屁股久久一区| 国产精品吊钟奶在线| 欧美电影免费观看| 久久精品国产精品| 97精品国产aⅴ7777| 日本成人在线视频网址| 日韩精品中文字幕有码专区| 国产99视频精品免视看7| 成人激情视频免费在线| 亚洲成色999久久网站| 日韩大陆毛片av| 日韩欧美成人区| 91欧美精品午夜性色福利在线| 黑人精品xxx一区| 欧美中文字幕视频| 久久久精品一区二区三区| 亚洲аv电影天堂网| 在线色欧美三级视频| 欧美性猛交xxxx免费看漫画| 亚洲精品自产拍| 国产在线播放91| 亚洲va久久久噜噜噜久久天堂| 国产欧美中文字幕| 欧美成人三级视频网站| 国产精品∨欧美精品v日韩精品| 57pao成人国产永久免费| 亚洲第一级黄色片| 亚洲国产中文字幕在线观看| 日韩一区二区av| 97精品国产aⅴ7777| 91精品综合视频| 九九精品视频在线观看| 欧美日韩在线第一页| 国产精品白嫩美女在线观看| 亚洲第一色在线| 国产欧美日韩中文字幕| 国产一区二区三区免费视频| 久久亚洲私人国产精品va| 亚洲第一级黄色片| 亚洲日本中文字幕免费在线不卡| 清纯唯美日韩制服另类| 日韩女优人人人人射在线视频| 欧美性生交xxxxx久久久| 91精品久久久久久久久久|