C 設計模式(二) 物件導向八大設計原則

2021-10-08 14:25:44 字數 1612 閱讀 2215

變化是復用的天敵!

物件導向設計最大的優勢在於: 抵禦變化!

• 從巨集觀層面來看,物件導向的構建方式更能適應軟體的變化,

能將變化所帶來的影響減為最小。 

• 從微觀層面來看,物件導向的方式更強調各個類的「責任」 •

由於需求變化導致的新增型別不應該影響原來型別的實現——

是所謂各負其責

• 從語言實現層面來看,物件封裝了**和資料。 •

從規格層面講,物件是一系列可被使用的公共介面。 •

從概念層面講,物件是某種擁有責任的抽象。

• 高層模組(穩定)不應該依賴於低層模組(變化),二者都應該依賴

於抽象(穩定) 。

• 抽象(穩定)不應該依賴於實現細節(變化) ,實現細節應該依賴於

抽象(穩定)。

為了對抗「變化」,將穩定的頂層設計和不穩定的底層設計都依賴於(穩定的)抽象,同時也滿足了松耦合的要求。 •

對擴充套件開放,對更改封閉。 •

類模組應該是可擴充套件的,但是不可修改。

為了穩定性與相容性,不能隨意,但可以在原基礎上擴充套件。 •

乙個類應該僅有乙個引起它變化的原因。 •

變化的方向隱含著類的責任。

盡量將任務解耦,一是方便復用,二是方便管理

• 子類必須能夠替換它們的基類(is-a)。 •

繼承表達型別抽象。

子類需實現基類的抽象

• 不應該強迫客戶程式依賴它們不用的方法。 •

介面應該小而完備。

僅為客戶程式提供必要的介面 •

類繼承通常為「白箱復用」,物件組合通常為「黑箱復用」。 •

繼承在某種程度上破壞了封裝性,子類父類耦合度高。 •

而物件組合則只要求被組合的物件具有良好定義的介面,耦合

度低。

盡量使用耦合度更低的物件組合,因為類繼承時基類向子類暴露過多,且子類會依賴父類,這都是不利的。

• 使用封裝來建立物件之間的分界層,讓設計者可以在分界層的

一側進行修改,而不會對另一側產生不良的影響,從而實現層

次間的松耦合。

封裝變化點,進一步解耦合。 •

不將變數型別宣告為某個特定的具體類,而是宣告為某個介面。 •

客戶程式無需獲知物件的具體型別,只需要知道物件所具有的

介面。 •

減少系統中各部分的依賴關係,從而實現「高內聚、松耦合」

的型別設計方案。

介面的規範化代表了這個行業的興旺程度,因此一切以介面為第一位。

1. 設計習語 design idioms

design idioms 描述與特定程式語言相關的低層模式,技巧,

慣用法。

2. 設計模式 design patterns

design patterns主要描述的是「類與相互通訊的物件之間的組

織關係,包括它們的角色、職責、協作方式等方面。

3. 架構模式 architectural patterns

architectural patterns描述系統中與基本結構組織關係密切的

高層模式,包括子系統劃分,職責,以及如何組織它們之間關

系的規則。

物件導向八大設計原則

目的是使程式更加靈活 開 閉原則 目標 總的指導思想 open closed principle 對擴充套件開放,對修改關閉。增加新功能,不改變原有 類的單一職責 乙個類的定義 single responsibility principle 乙個類有且只有乙個改變它的原因。適用於基礎類,不適用基於基...

物件導向八大設計原則

1 依賴倒置模式 dip 穩定不依賴於變化,提出了抽象類。2 開放封閉原則 ocp 對擴充套件開放,對更改封閉 類模組應該是可擴充套件,不可修改的 3 單一職責原則 srp 類裡面不要放太多的成員,這代表這個類裡面隱含了多個責任。4 liskov替換原則 lsp 5介面隔離原則 isp 介面應該小而...

設計模式 八大設計原則

1.依賴倒置原則 dip 1 高層模組 穩定 不應該依賴於低層模組 變化 二者都應該依賴於抽象 穩定 2 抽象 穩定 不應該依賴於實現細節 變化 實現細節應該依賴於抽象 穩定 這裡 抽象 指的是抽象基類,實現細節 是指子類,低層模組繼承於抽象類,抽象類為高層模組提供低層模組的介面。2.開放封閉原則 ...