PHP核心技术笔记(2):面向对象的设计原则
? ? 1.面向對象設計五大原則
? ? 面向對象設計的五大原則分別是單一職責原則、接口隔離原則、開放-封閉原則、替換原則、依賴倒置原則。
? ? 2.單一職責原則(single Pesponsibility Principle,SRP)
? ? 單一職責有兩個含義:一個是避免相同的職責分散到不同的累中,另一個是避免一個類承擔太多職責。
? ? 為什么遵守SRP:可以減少類之間的耦合,提高類的復用性。
? ? SRP在實際代碼中的應用:
? ? 工廠模式(Factory):根據不同的參數生成不同的實例化對象。它只負責生成對象而不負責對象的具體內容。如數據庫操作,緩存操作。
? ? 命令模式:分離“命令的請求者”和“命令的實現者”方面的職責,達到請求和實現的解耦。如你去餐館吃飯,餐館有顧客,服務員,廚師三種職責。作為顧客只要列出菜單,傳給服務員,服務員通知廚師,廚師去實現的過程。
? ? 3.接口隔離原則(Interface Segregation Principle,ISP)
? ? 接口隔離原則:表面客戶端不應該被強迫實現一些他們不會使用的接口,應該把胖接口中的方法分組,然后用多個接口代替它,每個接口服務于一個子模塊,簡單地說就是使用多個專門的接口比使用單個接口要好的多。
? ? “接口隔離”其實就是定制化服務設計的原則。使用接口的多重繼承實現對不同的接口的組合,從而對外提供組合功能--達到“按需提供服務”。如PDO是一個抽象的數據接口層,它告訴我們接口應該是通用的、基本的、不易變化的,對于其他數據庫特定的操作方法不應該出現到該接口里,減少對接口的污染。
? ? ?接口污染的處理方式:利用委托分離接口,利用多繼承分離接口。?委托方式中,有兩個對象參與處理同一個請求,接受請求的對象將請求委托給另一個對象來處理,如策略模式、代理模式。
? ? 4.開放-封閉原則(Open-Close Principle,OCP)
? ? Open(Open for extension)模塊的行為必須是開放的,支持擴展的,而不是僵化的。Close(Closed for modification)在對模塊的功能進行擴展時,不應該影響或大規模地影響已有的模塊。一個模塊在擴展性方面應該是開放的而在更改性應該是封閉的。
? ? 實現開放-封閉的核心思想是對抽象編程,而不對具體編程。因為抽象相對穩定。讓類依賴固定的抽象,這樣修改就是封閉的;而通過面向對象的繼承和多態機制,可以實現對抽象體的繼承,通過方法的覆寫改變固有行為,實現擴展新的方法,所以對于擴展是開放的。
? ? 在設計方面充分應用“抽象”和封裝的思想:一方面在軟件系統中找出“可變因素”,將之封裝起來;另一方面一種可變性因素不應當散落在多個不同代碼模塊中,而應當被封裝到一個對象中。
? ? 在設計模式中,裝飾模式比較明顯地用到OCP。
? ? 5.替換原則(Liskov Substitution Principle,LSP)
? ? 替換原則:子類型必須能夠替換掉它們父類型,并出現在父類能夠出現的任何地方。LSP主要是針對繼承的設計原則。
? ? 如何遵守該設計原則:父類的方法都要在子類中實現或重寫,并且派生類只實現抽象類中聲明的方法,而不應當給出多余方法的定義或實現;在客戶端程序中只應該使用父類對象而不應當直接使用子類對象,這樣可以實現運行期綁定(動態多態)。
? ? LSP包括使用多態實現隱藏基類和派生類對象的區別,以及組合的方式解決繼承中的基類與派生類中不符合語意的情況。
? ? 6.依賴倒置原則(Dependence Inversion Principle,DIP)
? ? 依賴倒置原則:將依賴關系倒置為依賴接口。上層模塊不應該依賴于下層模塊,它們共同依賴于一個抽象;抽象不能依賴于具體,具體應該依賴于抽象。
? ? 專門由一個程序檢測配置是否正確以及加載配置中所依賴的實現,這檢測程序稱為IOC容器。在J2EE中通常把DAO層和Service層細分為接口層和實現層,然后在配置文件中進行依賴關系倒置,這是常見的DIP應用。
? ? 如何滿足DIP:每個較高層次類都為它所需要的服務提出一個接口聲明,較低層次類實現這個接口;每個高層類都通過該抽象接口使用服務。
轉載于:https://www.cnblogs.com/linzhenjie/archive/2013/05/06/3063368.html
總結
以上是生活随笔為你收集整理的PHP核心技术笔记(2):面向对象的设计原则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 测试人员如何搭建自动打包部署平台?(具体
- 下一篇: GUI用户界面行为