一、開閉原則
是什麼:對擴充套件開放,對修改封閉。可以理解為,可以根據需求隨意增加新的類,但不要對原有的類進行修改。
用處:1.可擴充套件度高,靈活。可以通過新增模組滿足不斷變化的需求。
2.可維護性強,無需修改**。可以保證變化的系統有一定的穩定性和延續性
實現:開閉原則的核心思想在於抽象,對於不變的部分,把它抽象成不變的介面,變化的部分需要進行評估和分類,每乙個可變的
因素都要進行單獨的封裝。例如原本有個商品類,現在推出活動,需要對商品進行打折處理,可以通過新建乙個打折商品類繼承商品類的形式來實現。
二、單一職責原則
是什麼:就乙個類而言,應該僅有乙個引起他變化的原因。防止相同型別的職責,分離到不同的類中,並且同乙個類無需編制多餘的職責,符合高內聚低耦合的標準。
用處:1.有助於清晰的理清設計與編碼的思路。
2.有助於簡化維護,編碼,測試的流程。
3.複雜問題簡單化,有利於**的重用。
4.職責之間消除耦合後有利於系統的擴充套件。
實現:1.從物件導向的角度分析,按照物件的屬性,運動規律的相似性來確定職責。
2.從業務功能的角度進行分析,例如將增刪改封裝成乙個類。並且要注意類的大小範圍要適中。範圍過大職責過多,就會造成這個類很難維護
三、黎克特制代換原則
是什麼:子類必須可以替換掉他們的基類(物件導向語言中的繼承所遵循的)
用處:提高**的開放性
實現:通過繼承實現
四、依賴倒換原則
是什麼:1.高層模組不應該依賴於底層模組,二者都應該以來於抽象。在設計系統時,需要運用抽象來分析,而不是一開始就關注類的細節。
2.要針對介面程式設計,不要針對實現程式設計。通過介面與抽象類進行各種變數,引數,方法的宣告,並且禁止實現類去做以上宣告。
用處:提高系統的靈活性和擴充套件性
實現:1.從實現抽象類的角度分析,需要保證引用『基類』的地方,可以修改成其子類。
2.從層次關係角度進行分析,需要定義清晰的層次關係,使每個層次通過介面的方式進行。
3.從物件構造的角度進行分析,如果建立的是動態的物件,則使用依賴倒換,如果是靜態的具體類並且變化率很低,則我們無需再穿件基類去繼承,以規避維護多餘**的風險。
五、介面隔離原則
是什麼:分離客戶程式和介面1,不應該強迫客戶依賴於他們不用的方法。
2.乙個類對另乙個類的依賴性應當建立在最小的介面上。
用處:實現介面隔離原則減少**的冗餘和介面修改的頻率(有點類似於單一職責原則)
實現:1.從邏輯角度考慮介面,我們也可以把某一類功能也設計成介面。
2.根據場合和呼叫者的情況,消除無關的方法。
3.對客戶程式進行有效的區分,並對對應的介面進行變化。
六、迪公尺特法則
是什麼:又叫做最少知識原則,就是乙個物件應當對其他物件有盡可能少的了解,不必與不相識的人直接聯絡(類似**模式)1.狹義上講,如果兩個類不必彼此直接通訊,那麼這兩個類不應當直接的相互作用,如果其中乙個類需要呼叫另乙個類的方法,可以通過第三者**這個呼叫。
2.廣義上講,乙個模組設計的好壞,乙個重要的標識就是該模組在多大程度上講自己的內部資料與現實的有關細節隱藏起來。
用處:1.有利於降低類之間的耦合,由於類之間去除了依賴關係,則各軟體功能模組之間相互獨立。
2.如果系統需要擴充套件,則更加符合開閉原則對修改關閉的要求。
3.將內部資料與實現細節隱藏,使各個功能子模組遠離耦合,從而提高**的重用性和可維護性。
實現:1.對類進行分類設計時,需要建立低耦合的層次關係從而達到高度重用的效果。
2.每個類之間要降低成員之間的訪問程度,盡量降低它的訪問許可權。
3,.盡量把類設計成不變的類,以方便功能的實現。
4.與依賴倒換相結合。過度的使用迪公尺特會產生大量的中間類,將會使系統維護變得複雜。
設計模式六大原則
0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...
設計模式六大原則
0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...
設計模式六大原則
參考文章 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領域中的相應職責,或者可以定義為 就乙個類而言,應該只有乙個引起它變化的原因。開閉原則 open closed principle,ocp 乙個軟體實體應當對擴充套件開放,對修改關閉。...