国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP面向對象五大原則之依賴倒置原則(DIP)詳解

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

2019-10-13 14:33雪山飛豬 PHP教程

這篇文章主要介紹了PHP面向對象五大原則之依賴倒置原則(DIP),簡單講述了依賴倒置原則的概念、原理并結合實例形式分析了php依賴倒置原則相關定義與使用方法,需要的朋友可以參考下

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

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

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

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

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

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

這里以雇員類為例

<?php
interface 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程序設計有所幫助。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产精品美女久久久久aⅴ国产馆 | 亚洲一区在线观看视频 | 精品无码三级在线观看视频 | 欧美在线观看禁18 | 久久精品小视频 | 亚洲国产一区二区三区在线播放 | 中文字幕在线第一页 | 自拍在线 | 亚洲精品区 | 自拍偷拍欧美 | www.国产精品 | 久久精品视频一区 | 日韩美女一级片 | 国产乱视频| 欧美日韩不卡合集视频 | 免费午夜视频 | 国产精品尤物在线观看 | 农村末发育av片四区五区 | 九九九久久国产免费 | 国产精品一二三区视频出来一 | 久久亚洲美女 | 一区二区三区动漫 | 色综合天天综合网国产成人网 | 日本不卡一区二区三区 | 亚洲a网 | 久久久久久99 | 粉色在线观看 | 午夜爽爽爽 | 日韩视频在线观看 | 亚洲精品在线播放 | 亚洲精品久久久久久久久久久 | 视频一区二区国产 | 国产午夜精品一区二区三区免费 | 欧美精品在线一区二区 | 欧美午夜寂寞影院 | 福利在线观看 | 国产综合在线视频 | 久久久久久久久久久久99 | 欧美国产精品一区二区三区 | 欧美日本韩国一区二区三区 | 欧美一级高清免费 |