面向對象的設計原則

原文鏈接 - 面向對象的設計原則

2 面向對象的設計原則

2.1 面向對象設計的五大原則

2.1.1 單一職責原則(Single Pesponsibility Principle,SRP)

  1. 一個是避免相同的職責分散到不同的類中,另一個是避免一個類承擔太多責任
  2. 可以減少類之間的耦合,提高類的複用性
  3. 工廠模式允許你在代碼執行時實例化對象
  4. 命令模式也是 SRP 的體現,命令模式分離“命令的請求者”和“命令的實現者”方面的職責
  5. 代理模式也體現了 SRP
  6. SRP 不只是對類設計有意義,對以模塊、子系統爲單位的系統架構設計同樣有意義

2.1.2 接口隔離原則(Interface Segregation Principle,ISP)

  1. 客戶端不應該是被迫實現一些他們不會使用的接口
  2. 一個類對另一個類的依賴性應當是建立在最小的接口上的
  3. 接口污染就是爲接口添加不必要的職責
  4. “接口隔離”其實就是定製化服務設計的原則,使用接口的多重繼承實現對不同的接口的組合,從而對外提供組合功能 – 達到“按需提供服務”
  5. 對於接口的污染
    • 利用委託分離接口
    • 利用多繼承分離接口

2.1.3 開放-封閉原則(Open-Close Principle,OCP)

  1. Open,模塊的行爲必須是對外開放的、支持擴展的,而不是僵化的
  2. Closed,在對模塊的功能進行擴展時,不應該影響或大規模的影響已有的程序模塊
  3. 核心思想就是對抽象編程,而不對具體編程,因爲抽象相對穩定
  4. 在設計方面充分應用“抽象”和“封裝”的思想
  5. 在系統功能編程方面應用面向接口的編程

2.1.4 裏式替換原則(Liskov Substitution Principle,LSP)

  1. 子類必須能替換成他們的基類
  2. 子類型必須能夠替換掉他們的父類型、並出現在父類能夠出現的任何地方。它指導我們如何正確的進行繼承與派生,併合理的重用代碼
  3. LSP 主要是針對繼承的設計原則
  4. 如何遵守該設計原則呢?
    • 父類的方法都要在之類中實現或重寫,並且派生類只實現其抽象類中聲明的方法,而不應當給出多餘的方法定義或實現
    • 在客戶端程序中只應該使用父類對象而不應當直接使用之類對象,這樣可以實現運行期綁定(動態多態)
  5. PHP 對 LSP 的支持並不好,缺乏向上轉型等概念

2.1.5 依賴倒置原則(Dependence Inversion Principle,DIP)

  1. 上層模塊不應該依賴下層模塊,它們共同依賴於一個對象(父類不能依賴子類,它們都要依賴抽象類)
  2. 抽象不能依賴於具體,具體應該依賴於抽象
  3. 專門由一個程序檢測配置是否正確(如所依賴的類文件是否存在)以及加載配置所依賴的實現,這個檢測程序,就稱爲IOC容器
  4. 一般認爲,依賴注入(DI)和依賴查找(DS)是 IOC 的兩種實現

2.3 面向對象的思考

  1. PHP 不是一門很好的面向對象的語言,因爲其無法做到完全面向對象,也無法優雅實現面向對象。
  2. 在 PHP 的開發中應該靈活使用面向對象的特性和設計原則
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章