網易C 設計模式筆記(二)面向設計物件的原則

2022-07-30 22:51:26 字數 1233 閱讀 6999

變化是復用的天敵!

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

重新認識物件導向

理解隔離變化

從巨集觀層面來看,物件導向的構建方式更能適應軟體的變化,能將變化所帶來的影響減為最小。
各司其職

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

由於需求變化導致的i效能增型別不應該影響原來型別的實現----是所謂各負其責。

物件是什麼?

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

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

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

物件導向設計原則(1)

依賴倒置原則(dip)

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

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

開放封閉原則(ocp)

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

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

單一職責原則(spr)

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

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

liskov替換原則(lsp)

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

繼承表達型別抽象

介面隔離原則(isp)

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

介面應該繼承而完備

優先使用物件組合,而不是類繼承

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

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

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

封裝變化點

使用封裝來建立物件之間的分解層,讓設計者可以在分界層的一側進行修改,而不會對另一側產生不良影響,從而實現層次之間的松耦合。
針對介面程式設計,而不是針對實現程式設計

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

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

減少系統中各部分的依賴關係,從而實現「高內聚、低耦合」的型別設計方案。

設計模式學習筆記 物件導向設計原則

1 單一職責 乙個類只應該做一樣事情 2 開閉原則 對擴充套件開放,對修改封閉 3 黎克特制代換 以父類的名義統一進行呼叫,使用時賦以具體子類,實現多型。4 依賴倒轉 是黎克特制代換原則另一種表述。針對介面 抽象程式設計,其實也就是以父類的名義統一進行呼叫,使用時賦以具體子類,實現多型。5 介面隔離...

設計模式學習筆記 物件導向設計原則

單一職責原則定義 單一職責原則 srp single responsibility principle 又稱單一功能原則,物件導向五個基本原則 solid 之一。它規定乙個類應該只有乙個發生變化的原因。該原則由羅伯特 c 馬丁 robert c.martin 於 敏捷軟體開發 原則 模式和實踐 一書...

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

變化是復用的天敵!物件導向設計最大的優勢在於 抵禦變化!從巨集觀層面來看,物件導向的構建方式更能適應軟體的變化,能將變化所帶來的影響減為最小。從微觀層面來看,物件導向的方式更強調各個類的 責任 由於需求變化導致的新增型別不應該影響原來型別的實現 是所謂各負其責 從語言實現層面來看,物件封裝了 和資料...