PHP核心技術筆記(2) 物件導向的設計原則

2022-07-09 13:51:10 字數 1580 閱讀 2072

物件導向設計的五大原則分別是單一職責原則、介面隔離原則、開放-封閉原則、替換原則、依賴倒置原則。

單一職責有兩個含義:乙個是避免相同的職責分散到不同的累中,另乙個是避免乙個類承擔太多職責。

為什麼遵守srp:可以減少類之間的耦合,提高類的復用性。

srp在實際**中的應用:

工廠模式(factory):根據不同的引數生成不同的例項化物件。它只負責生成物件而不負責物件的具體內容。如資料庫操作,快取操作。

命令模式:分離「命令的請求者」和「命令的實現者」方面的職責,達到請求和實現的解耦。如你去餐館吃飯,餐館有顧客,服務員,廚師三種職責。作為顧客只要列出選單,傳給服務員,服務員通知廚師,廚師去實現的過程。

介面隔離原則:表面客戶端不應該被強迫實現一些他們不會使用的介面,應該把胖介面中的方法分組,然後用多個介面代替它,每個介面服務於乙個子模組,簡單地說就是使用多個專門的介面比使用單個介面要好的多。

「介面隔離」其實就是定製化服務設計的原則。使用介面的多重繼承實現對不同的介面的組合,從而對外提供組合功能--達到「按需提供服務」。如pdo是乙個抽象的資料介面層,它告訴我們介面應該是通用的、基本的、不易變化的,對於其他資料庫特定的操作方法不應該出現到該介面裡,減少對介面的汙染。

介面汙染的處理方式:利用委託分離介面,利用多繼承分離介面。 委託方式中,有兩個物件參與處理同乙個請求,接受請求的物件將請求委託給另乙個物件來處理,如策略模式、**模式。

open(open for extension)模組的行為必須是開放的,支援擴充套件的,而不是僵化的。close(closed for modification)在對模組的功能進行擴充套件時,不應該影響或大規模地影響已有的模組。乙個模組在擴充套件性方面應該是開放的而在更改性應該是封閉的。

實現開放-封閉的核心思想是對抽象程式設計,而不對具體程式設計。因為抽象相對穩定。讓類依賴固定的抽象,這樣修改就是封閉的;而通過物件導向的繼承和多型機制,可以實現對抽象體的繼承,通過方法的覆寫改變固有行為,實現擴充套件新的方法,所以對於擴充套件是開放的。

在設計方面充分應用「抽象」和封裝的思想:一方面在軟體系統中找出「可變因素」,將之封裝起來;另一方面一種可變性因素不應當散落在多個不同**模組中,而應當被封裝到乙個物件中。

在設計模式中,裝飾模式比較明顯地用到ocp。

替換原則:子型別必須能夠替換掉它們父型別,並出現在父類能夠出現的任何地方。lsp主要是針對繼承的設計原則。

如何遵守該設計原則:父類的方法都要在子類中實現或重寫,並且派生類只實現抽象類中宣告的方法,而不應當給出多餘方法的定義或實現;在客戶端程式中只應該使用父類物件而不應當直接使用子類物件,這樣可以實現執行期繫結(動態多型)。

lsp包括使用多型實現隱藏基類和派生類物件的區別,以及組合的方式解決繼承中的基類與派生類中不符合語意的情況。

依賴倒置原則:將依賴關係倒置為依賴介面。上層模組不應該依賴於下層模組,它們共同依賴於乙個抽象;抽象不能依賴於具體,具體應該依賴於抽象。

專門由乙個程式檢測配置是否正確以及載入配置中所依賴的實現,這檢測程式稱為ioc容器。在j2ee中通常把dao層和service層細分為介面層和實現層,然後在配置檔案中進行依賴關係倒置,這是常見的dip應用。

如何滿足dip:每個較高層次類都為它所需要的服務提出乙個介面宣告,較低層次類實現這個介面;每個高層類都通過該抽象介面使用服務。

物件導向核心技術

只支援單繼承 即乙個子類只能繼承乙個父類 child extends parents重寫父類 重寫時不能降低方法的修飾許可權範圍,父類的protected可以改為public 但不能private parents a new child 父類宣告,子類實現 child a new parents 這...

java物件導向核心技術

1 內部類 內部類可以節省編譯後的位元組碼,class檔案的大小,而在實現監聽的時候,採用內部類很容易實現,但使用內部類會導致結構不清晰。1 成員變數內部類 public class out private int i 0 private void g private class inner voi...

PHP核心技術

1.寫乙個能建立多級目錄的php函式 2.寫一段php 確保多個程序寫入檔案成功 3.寫乙個php函式,盡可能高效地從乙個標準的url裡取出檔案的副檔名,例如 http 需要取出php或者.php 方法一 方法二 4.寫乙個php函式,能夠遍歷乙個資料夾下的所有檔案和子資料夾 5.簡述論壇中無限分類...