深入PHP物件導向 模式與實踐 模式原則(1)

2021-07-29 19:26:21 字數 1515 閱讀 5639

通過以靈活的方式來組合物件,元件能在執行時被定義。《設計模式》將此提煉出乙個原則:組合優於繼承。

繼承是應對變化的環境及上下文設計的有效方式,然而它會限制靈活性,尤其是當類承擔了過多的責任的時候。

利用這種繼承模式,我們可以在課程的實現之間切換。可是如果引入一組新的特殊性,又會怎麼樣?比如我們需要處理演講和研討會。使用繼承如下:

在該體系中,我們不得不大量重複開發功能,否則無法使用繼承樹來管理**機制。我們可能考慮在父類lesson中使用條件語句來移除那些不適宜的重複。我們是把定價邏輯從繼承樹中一併移除並遷移到父類中,但這與我們通常使用多型代替條件的重構思想背道而馳:

}lession類需要乙個作為屬性的coststrategy物件。lession::cost()方法只呼叫coststrategy::cost()。這種顯示呼叫另乙個物件的方法來執行乙個請求的方式便是「委託」。

如你所見,此結構的效果之一便是讓我們關注類的職責。組合使用物件比繼承體系更靈活,因為組合可以以多種方式動態地處理任務,不過這可能導致**的可讀性下降。因為組合需要更多的物件型別,而這些型別的關係並不像在繼承關係中那邊有固定的可預見性。

深入PHP物件導向 模式與實踐 設計模式

設計模式便是分析過的問題和問題解決方案所闡釋的優秀實踐。如何處理乙個請求?如何將請求資料轉換成系統對應的指令?如何獲得資料?如何顯示結果?等等。隨著時間流逝和經驗積累,我們會或優雅或困難地回答問題,並總結出一些非正式的 可在專案中重複使用的解決方案,而這些解決方案便是設計模式。設計模式記錄並規範了這...

深入PHP物件導向 模式與實踐 模式原則(2)

如果類之間有非常強的依賴性,那麼這樣的系統就很難維護,因為系統裡的乙個改動會引起一連串的相關改動。重用性是物件導向設計的主要目的,而緊耦合便是它的敵人。當我們看到系統中乙個元件的改變迫使系統其他許多地方也發生改變的時候,就可以診斷為緊耦合了。在你自己的專案中,你會看到很多這種需要分離元件的情況。例如...

深入PHP物件導向 模式與實踐 企業模式(3)

前端控制器模式用乙個中心來處理所有到來的請求,最後呼叫檢視來將結果呈現給使用者。前端控制器模式定義了乙個中心入口,每個請求都要從這個入口進入系統。前端控制器處理請求並選擇要執行的操作。系統中的控制器複製分配任務給其他。其他類完成了絕大部分實際工作。前端控制器通常通過執行乙個command物件來呼叫應...