1、可擴充套件性:當客戶提出新業務要求,程式可在較小的改動下進行功能擴充套件,也可視為可維護性
3、可靠性:新增新功能對原有功能無影響
4、高內聚、低耦合:事實上這個特點是程式一直追求的
1.單一職責原則
介紹:乙個類只負責乙個職責
應用:類a有職責1,職責2,職責1需求變更時,進行改動類a,由於職責2依賴於類a,就可能造成職責2執行錯誤。將類a分解成類a 1,類a 2解決問題,即滿足單一職責原則
優點:降低類的複雜度,提高**可讀性、可維護性
注意:遵守該原則分解類本身就需要付出代價,因此,通常情況下我們遵守該原則,但在邏輯足夠簡單時可以將該 原則級別降低,不在類級別遵守單一職責,而在方法級別遵守單一職責。什麼時候邏輯足夠簡單呢?比如職責1只需要乙個方法時,只需要將職責1設計成乙個方法而不需要設計成乙個類。
2.介面隔離原則
介紹:使用者不需要依賴它不需要的介面,乙個類對另乙個類的依賴應建立在最小介面上
應用:inte***ce 1有五個介面,類a需要使用介面1、2、3,故通過inte***ce 1建立實現類b,類c需要使用介面4、5,故通過inte***ce 1建立實現類d。類b和類c都需要實現五個介面,但類b不需要實現介面4、5,而類d不需要實現介面1、2、3,故inte***ce 1對他們來說不是最小介面。將inte***ce 1拆分成有介面1、2、3的inte***ce 2、有介面4、5的inte***ce 3即解決問題,將介面隔離起來,即滿足介面隔離原則。
錯誤案例
正確
3.依賴倒置原則
介紹:抽象不應該依賴具體,具體應該依賴抽象;中心思想是面向介面程式設計
應用:具體類a有乙個接受資訊行為,類b實現接受電子資訊,類a直接依賴具體類b,b作為引數傳入a,如果該行為新增實現類c,類c實現接受郵件資訊,而具體類a要使用新實現,則具體類a也要新增新改動,即需要將 c作為引數傳入a。如果將類b繼承inte***ce 1,接收資訊行為設定為inte***ce 1的規範(即介面1),接受類作為引數傳入a,則新增新實現只需新增實現類c繼承inte***ce 1,而不需要改動a。
錯誤案例
正確
優點:相對於具體的多變性,抽象要穩定的多。使用介面或抽象類的目的是定好規範,具體的細節實現交給他們的實現類去解決。
依賴傳遞:三種傳遞方式:介面傳遞,構造器傳遞,setter方法傳遞
注意:
4.黎克特制替換原則
介紹:所有引用基類的地方必須能透明的(相當於直接替換)的使用其子類。遵守黎克特制替換原則,相當於要求子類盡量不要重寫它的父類。
應用:定義父類father和子類son,他們有乙個方法1。程式設計師a為了新功能將son重寫了方法1,程式設計師2使用son的方法1,沒有太注意,將方法1按照父類的定義來使用(因為一般看父類的注釋不繼續往下面看子類的),於是出現了bug。這時可以讓father和son類繼承乙個更抽象的基類base類,讓father和son類繼承base類,重寫的方法1放到son類,原來的還是father類。father類想使用重寫的方法1可以引入son類
注意:繼承實際上在一定程度上也讓兩個類有些耦合(父類修改時所有的子類會受到影響),適當情況下,可以通過聚合、組合和依賴的形式解決問題。
5.開閉原則
介紹:乙個軟體實體,如類、模組、函式應該對擴充套件開放(即提供方,新加的軟體實體),對修改關閉(即使用方,原有的軟體實體)。當變化時盡量通過擴充套件軟體實體來實現要求,而不是修改已有細節。
應用:參考依賴倒置原則應用
注意:開閉原則是程式設計中最基礎最通用的原則,程式設計中遵循其他原則以及使用設計模式即為了實現此原則
6.迪公尺特原則
介紹:乙個類應該對另乙個類保持最少的了解,只知道實現結果不需要知道過程,故又稱「最少知道原則」。不論依賴的類內部邏輯多麼複雜,盡量將其封裝在自己內部,對外只提供方法,不洩露任何資訊。
解析:此原則也就是只與最直接的朋友進行通訊。類與類之間必然會有耦合關係,這種耦合可以稱之為朋友。其中,稱成員變數、方法引數、返回值中的類為最直接的朋友,而區域性變數中的類不為直接朋友。陌生的類 最好不要以區域性變數的形式出現在類的內部。
注意:
7.合成復用原則
介紹:盡量使用聚合/組合關係,而不是繼承
應用:類a有抽象方法1,類b想使用方法1故而繼承類a,然而當類a新增抽象方法2時類b就必須繼承,增大耦合性。此時應該讓b與a之間為組合/聚合關係。
二十三種設計模式分類
三種型別
具體模式
建立型單例模式、工廠模式、抽象工廠模式、原型模式、建造者模式
結構型介面卡模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、**模式
行為型模板方法模式、命令模式、訪問者模式、迭代器模式、觀察者模式、中介者模式、備忘錄模式、直譯器模式、狀態模式、策略模式、責任鏈模式(職責鏈模式)
設計模式 七大設計原則
定義 應該有且只有乙個原因,引起類的變更 組合是一種強耦合關係,你我都有共同的生命週期,這種強耦合關係,不如直接使用介面實現 建議 介面一定要做到單一原則,類的設計盡量做到只有乙個原因引起變更 定義 所有使用父類的地方,必須能夠透明的使用其子類,反之不行 子類不能完整地實現父類的方法,或者父類的某些...
設計模式 七大設計原則(二)
簡單介紹一下七大設計原則 開閉原則 是所有物件導向設計的核心,對擴充套件開放,對修改關閉 依賴倒置原則 針對介面程式設計,依賴於抽象而不依賴於具體 單一職責原則 乙個介面只負責一件事情,只能有乙個原因導致類變化 介面隔離原則 使用多個專門的介面,而不是使用乙個總介面 迪公尺特法則 最少知道原則 只和...
設計模式 七大設計原則(一)
簡單介紹一下七大設計原則 開閉原則 是所有物件導向設計的核心,對擴充套件開放,對修改關閉 依賴倒置原則 針對介面程式設計,依賴於抽象而不依賴於具體 單一職責原則 乙個介面只負責一件事情,只能有乙個原因導致類變化 介面隔離原則 使用多個專門的介面,而不是使用乙個總介面 迪公尺特法則 最少知道原則 只和...