該專欄是為了讓lz更通俗地理解這個高深的設計模式,希望也可以幫助到你。
(1)概述
(2)建立型模式之抽象工廠模式、工廠方法模式、建造者模式、原型模式、單例模式;
(3)結構型模式之介面卡模式、橋接模式、組合模式、裝飾模式、外觀模式、享元模式、**模式;
(4)行為型模式之職責鏈模式、命令模式、直譯器模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態模式、策略模式、模板方法模式、訪問者模式。
設計模式一共分為三種型別:建立型模式、結構型模式、結構型模式。
主要用於建立物件。主要是想將系統使用的具體類封裝起來,隱藏這些類的例項構建和結合的方式。包含的設計模式有抽象工廠模式、工廠方法模式、建造者模式、原型模式、單例模式這5種。
用於處理類或物件的組合,它提供類和物件之間如何更好組合的方式。是從程式的結構上解決模組之間的耦合問題。包含的設計模式有介面卡模式、橋接模式、組合模式、裝飾模式、外觀模式、享元模式、**模式;
用於描述物件是怎樣互動和怎樣分配職責,不僅要描述物件,還要描述物件之間的通訊方式。包含的設計模式有職責鏈模式、命令模式、直譯器模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態模式、策略模式、模板方法模式、訪問者模式。
我在講原則之前,我想先說說耦合和內聚這兩個詞的概念和理解:
物件之間的耦合度指的是物件之間的依賴度,指導使用和維護物件的主要問題是物件之間的多重依賴性。物件之間的耦合越高,維護成本越高。因此物件的設計應使類和構件之間的耦合最小。耦合是軟體結構中各模組之間相互連線的一種度量,耦合強弱取決於模組間介面的複雜程度、進入或訪問乙個模組的點以及通過介面的資料。
所以耦合描述的是兩個模組之間的關係。
內聚(cohesion)是乙個模組內部各成分之間相關聯程度的度量。標誌乙個模組內各個元素彼此結合的緊密程度,它是資訊隱蔽和區域性化概念的自然擴充套件。內聚是從功能角度來度量模組內的聯絡,乙個好的內聚模組應當恰好做一件事。它描述的是模組內的功能聯絡。
所以內聚描述的是乙個模組內部的關係。
因此乙個好的設計應該是低耦合,高內聚。就是同乙個模組內的各個元素之間要高度緊密,但是各個模組之間的相互依存度卻要不那麼緊密。跟自己內部的關係要強大,要少依賴別人。
顧名思義,單一職責就是說對乙個類而言,應該僅有乙個引起它變化的原因。
如果乙個類承擔的職責過多,就等於把這些職責耦合在一起了。乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當發生變化時,設計會遭受到意想不到的破壞。
乙個模組滿足單一職責原則就實現了解耦和增強了內聚性。
定義:軟體實體對於擴充套件是開放的,對於修改是關閉的。
優點:(1)可復用性好:我們可以在軟體完成以後,仍然可以對軟體進行擴充套件,加入新的功能,非常靈活。因此,這個軟體系統就可以通過不斷地增加新的元件,來滿足不斷變化的需求。
(2)可維護性好:由於對於已有的軟體系統的元件,特別是它的抽象底層不去修改,因此,我們不用擔心軟體系統中原有元件的穩定性,這就使變化中的軟體系統有一定的穩定性和延續性。
定義:a.高層次的模組不應該依賴於低層次的模組,他們都應該依賴於抽象。b.抽象不應該依賴於具體實現,具體實現應該依賴於抽象。
簡單來說,就是要實現面向介面程式設計。這樣這大大降低了客戶程式與實現細節的耦合度,只要抽象不變,客戶程式就不需要變化。
定義:客戶端不應該依賴它不需要的介面;乙個類對另乙個類的依賴應該建立在最小的介面上。使用多個專門的介面比使用單一的總介面要好。
乙個介面代表乙個角色,不應當將不同的角色都交給乙個介面。沒有關係的介面合併在一起,形成乙個臃腫的大介面,這是對角色和介面的汙染。
簡單來說,我們應該滿足乙個介面負責一種職責,然後類實現的時候就去實現自己的責任介面。
定義:乙個物件應當對其他物件有盡可能少的了解,不和陌生人說話。
如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中的乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三者**這個呼叫。
定義:任何基類可以出現的地方子類一定可以出現。
黎克特制代換原則是對「開-閉」原則的補充。實現「開-閉」原則的關鍵步驟就是抽象化。而基類與子類的繼承關係就是抽象化的具體實現,所以黎克特制代換原則是對實現抽象化的具體步驟的規範。
定義:在乙個新的物件裡面使用一些已有的物件,使之成為新物件的一部分;新的物件通過向這些物件的委派達到復用已有功能的目的。它的設計原則是:要盡量使用合成/聚合,盡量不要使用繼承。
簡單來說:就是少用繼承,多用聚合。
後記:下一次就開始正式更新那23個設計模式了,期待吧!!!
設計模式專欄 策略模式
策略模式 strategy 定義了一組演算法,將每個演算法都封裝起來,並且使它們之間可以互換 策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有的演算法,減少了各種演算法類與使用演算法類之間的耦合。1 策略模式就是用來封裝...
設計模式專欄 狀態模式
狀態模式就是允許物件在內部狀態發生改變時改變它的行為,物件看起來好像修改了它的類。狀態模式主要解決的是當控制乙個物件狀態的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷邏輯簡化。狀態操作介面 public inte ce state具體狀態物件 publ...
學習《C 設計模式》 1 設計模式概述
模式是在特定環境下人們解決某類重複出現問題的一套成功或有效的解決方案。設計模式是一套被反覆使用的 多數人知曉的 經過分類編目的 設計經驗的總結 是在特定環境下為解決某一通用軟體設計問題提供的一套定製的解決方案,該方案描述了物件和類之間的相互作用。設計模式一般包含模式名稱 問題 目的 解決方案 效果 ...