一. 開閉原則
開閉原則(Open-Closed Principle, OCP) 是指一個軟件實體 (如類 模塊和函數(shù)) 應該對擴展開放, 對修改關閉. 所謂的開閉, 也正是對擴展和修改兩個行為的一個原則. 他強調(diào)的是用抽象構建框架, 用實現(xiàn)擴展細節(jié), 可以提高軟件系統(tǒng)的可復用性及可維護性. 開閉原則是面向對象設計中最基礎的設計原則, 它指導我們?nèi)绾谓⒎€(wěn)定, 靈活的系統(tǒng). 例如版本更新, 我們盡可能不修改源代碼, 但是可以增加新功能.
開閉原則的核心思想就是面向抽象編程.
二. 依賴倒置原則
依賴倒置原則(Dependence Inversion Principle, DIP) 是指設計代碼結構時, 高層模塊不應該依賴底層模塊, 二者都應該依賴其抽象. 抽象不應該依賴細節(jié), 細節(jié)應該依賴抽象. 通過依賴倒置, 可以減少類與類之間的耦合性, 提高系統(tǒng)的穩(wěn)定性, 提高代碼的可讀性和可維護性, 并且能夠降低修改程序所造成的風險.
以抽象為基準比以細節(jié)為基準搭建起來的架構要穩(wěn)定的多, 因此在拿到需求之后, 要面向接口編程, 先頂層在細節(jié)地設計代碼結構.
三. 單一職責原則
單一職責(Simple Responsibility Pinciple, SRP) 是指不要存在多于一個導致類變更的原因. 假設我們有一個類負責兩個職責, 一旦發(fā)生需求變更, 修改其中一個職責的邏輯代碼, 有可能導致另一個職責的功能發(fā)生故障. 這樣一來, 這個類就存在兩個導致類變更的原因. 可以將兩個職責用兩個類來實現(xiàn), 進行解耦. 后期需求變更維護互不影響. 這樣的設計, 可以降低類的復雜度, 提高類的可讀性, 提高系統(tǒng)的可維護性, 降低變更引起的風險. 總體來說, 就是一個類, 接口或方法只負責一項職責.
四. 接口隔離原則
接口隔離原則(Interface Segregation Principle, ISP) 是指用多個專門的接口, 而不使用單一的總接口, 客戶端不應該依賴它不需要的接口. 這個原則指導我們在設計接口時應當注意一下幾點:
一個類對另一個類的依賴應該建立在最小的接口之上.
建立單一接口, 不要建立龐大臃腫的接口.
盡量細化接口, 接口中的方法盡量少(不是越少越好, 一定要適度)
接口隔離原則符合我們常說的高內(nèi)聚, 低耦合的設計思想, 可以使類具有很好的可讀性, 可擴展性和可維護性. 我們在設計接口的時候, 要多花時間去思考, 要考慮業(yè)務模型, 包括對以后有可能發(fā)生變更的地方還要做一些預判. 所以, 對于抽象, 對于業(yè)務模型的理解是非常重要的.
五. 迪米特原則
迪米特原則(Law of Demeter LoD) 是指一個對象應該對其他對象保持最少的了解, 又叫最少知道原則(Least Knowledge Principle, LKP), 盡量降低類與類之間的耦合度. 迪米特原則主要強調(diào): 只和朋友交流, 不和陌生人說話. 出現(xiàn)在成員變量, 方法的輸入, 輸出參數(shù)中的類都可以成為成員朋友類, 而出現(xiàn)在方法體內(nèi)部的類不屬于朋友類.
六. 里式替換原則
里式替換原則(Liskov Substitution Principle, LSP) 是指如果對每一個類型為T1的對象o1, 都有類型為T2的對象o2, 使得以T1定義的所有程序P在所有的對象O1都替換成O2時, 程序P的行為沒有發(fā)生變化, 那么類型T2時類型T1的子類型.
這個定義看上去還是比較抽象的, 我們重新理解一下. 可以理解為一個軟件實體如果適用于一個父類, 那么一定適用其子類, 所有引用父類的地方必須能透明的適用其子類的對象, 子類對象能夠替換父類對象, 而程序邏輯不變. 根據(jù)這個理解, 引申含義為: 子類可以擴展父類的功能, 但不能改變父類原有的功能.
子類可以實現(xiàn)父類的抽象方法, 但不能覆蓋父類的非抽象方法.
子類可以增加自己特有的方法.
當子類的方法重載父類的方法時, 方法的前置條件 (即方法的輸入/入?yún)? 要比父類方法的輸入?yún)?shù)更寬松.
當子類方法實現(xiàn)父類的方法時 (重寫/重載或實現(xiàn)抽象方法), 方法的后置條件 (即方法的輸出/返回值) 要比父類更嚴格或與父類一樣.
使用里式替換原則有以下優(yōu)點:
約束繼承泛濫, 是開閉原則的一種體現(xiàn).
加強程序的健壯性, 同時變更時也可以做到非常好的兼容性, 提高程序的可維護性和擴展性, 降低需求變更時引入的風險.
七. 合成復用原則
合成復用原則(Composite/Aggregate Reuse Principle, CARP) 是指盡量使用對象組合(has-a)/聚合(contanis-a) 而不是繼承關系達到軟件復用的目的. 可以使系統(tǒng)更加靈活, 降低類與類之間的耦合度, 一個類的變化對其他類造成的影響相對較少.
繼承叫做白箱復用, 相當于把所有的實現(xiàn)細節(jié)暴露給子類. 組合/聚合成為黑箱復用, 我們是無法獲取到類以外的對象的實現(xiàn)細節(jié)的. 雖然我們要根據(jù)具體的業(yè)務場景來做代碼設計, 但也需要遵循OOP模型.
廣州天河區(qū)珠江新城富力盈力大廈北塔2706
020-38013166(網(wǎng)站咨詢專線)
400-001-5281 (售后服務熱線)
深圳市坂田十二橡樹莊園F1-7棟
Site/ http://www.szciya.com
E-mail/ itciya@vip.163.com
品牌服務專線:400-001-5281
長沙市天心區(qū)芙蓉中路三段398號新時空大廈5樓
聯(lián)系電話/ (+86 0731)88282200
品牌服務專線/ 400-966-8830
旗下運營網(wǎng)站:
Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權利。 粵ICP備09033321號