初探設計模式6 物件導向7大設計原則及例項

2021-09-20 02:23:48 字數 2704 閱讀 5211

開閉原則是這七大設計原則中最常見、最基本的

開閉原則定義:軟體實體對擴充套件是開放的,但對修改是關閉的。意思就是說在不修改軟體實體的基礎上去擴充套件其他功能。

開閉原則例項:

比如實現乙個繪製圖線的功能

設計方案如下圖所示

使用者類中直接呼叫畫直線類,但是如果有乙個新需求,要求我們畫斜線或者曲線的話,這時就需要修改畫直線類中的**(使用switch,else if),這樣就違背了開閉原則,於是我需要在不修改實體的基礎上去擴充套件畫斜線和曲線功能

重構後的**設計方案如下圖所示

這樣我們在沒有改動**的情況下,而是新增**的情況下完成功能擴充套件

如果乙個類具有多個職責,應該把這多個職責分離出去,再分別建立一些類去一一完成這些職責

換句話說就是乙個類的職責要單一,不能將太多的職責放在乙個類中

單一職責核心:高內聚、低耦合

如下圖是乙個類畫線的實現:

但是功能太過集中,嚴重違背了單一職責原則,重構後如下圖所示

是繼承復用的基石,說白了就是繼承與派生的規則

黎克特制替換原則核心:在軟體系統中,乙個可以接受父類物件的地方必然可以接受子類物件

黎克特制替換原則例項:某系統需要實現畫直線功能,現在有drawlinea和drawlineb兩種畫圖方式,在操作類中提供了這兩種畫圖方法選擇畫直線

現在我需要改變或新增一種畫直線方式來畫直線,比如原先使用drawlinea方式進行畫直線現在更換為drawlineb方式來畫直線,如果直接修改操作類的**就違背了開閉原則。現在使用黎克特制替換原則重構**,既可以方便了系統擴充套件,又遵循了開閉原則

重構後的方案圖如下圖所示

所以說黎克特制替換原則是實現開閉原則的重要方法之一

依賴倒置也叫依賴注入、依賴倒轉

要針對抽象層程式設計,不要針對具體類程式設計

依賴倒置原則核心:要依賴於抽象,不要依賴於具體的實現。

分開來說:(注:抽象:介面或抽象類;細節:具體實現;如果把模組層次關係比作基礎關係的話:高層模組和底層模組對應於父類和子類)

一、高層模組不應該依賴底層模組,這兩者應該依賴與其抽象 

二、抽想不應該依賴細節

三、細節應依賴抽象

依賴倒置例項:

比如某系統可以從本地獲取和伺服器獲取資料,後將資料可以為轉化配置成xml檔案和xls檔案

假設我們增加了資料來源或者有新的轉化格式,需要修改操作類裡面的源**,這樣就違背了開閉原則

現在使用依賴倒置原則對其進行重構

重構方案圖如下圖所示

例項解析oop程式設計七大設計原則(二)

使用多個專門介面來取代乙個統一的介面,

乙個介面不需要提供太多的行為,乙個介面應該只提供一種對外的功能,不應該把所有的操作都封裝到乙個介面中。

介面隔離原則核心:不應該強迫客戶端程式依賴他們 不需要的使用方法

介面隔離原則例項:

比如乙個系統中有乙個大的介面,這個介面包含了gameobjecta、gameobjecb、gameobjectc三個物件的介面

但是這三個物件中有些介面未必需要實現,現在使用介面隔離原則將介面隔離,這樣又滿足單一職責原則

重新構造的方案如下圖所示

又叫做最少知識原則,乙個軟體實體對其他實體的引用越少越好,或者說如果兩個類不必直接通訊,那麼這兩個類就不應當發生直接的相互作用,而是通過乙個第三者發生間接性的互動。

迪公尺特原則核心:高內聚,低耦合

低迷特原理例項:

比如某一系統有多個系統和多個資料來源,他們之間的聯絡圖如下:

這樣比較雜亂,耦合性較高,使用迪公尺特原則後的構造方案如下圖所示:

迪公尺特原則缺點:

一、降低模組間的通訊效率

二、在系統的各個角落散落大量的小方法

在物件導向設計中,可以通過兩種基本方法在不同的環境中復用已有的設計和實現,即通過組合或通過繼承。

繼承復用:實現簡單,便於擴充套件。但是破壞系統的封裝性。

組合復用:耦合性相對較低,選擇性的呼叫成員物件的操作。可以再執行時動態運。.

合成復用核心:盡量使用物件組合而不是繼承達到復用的目的

物件導向之6大設計原則!

1.開閉原則。乙個軟體實體,如類,模組和函式應該對外擴充套件開發,對內修改關閉。解讀 用抽象構建框架,用實現擴充套件細節。不以改動原有類的方式來實現新需求,而是應該以實現事先抽象出來的介面 或具體類繼承抽象類 的方式來實現。優點 開閉原則的優點在於可以在不改動原有 的前提下給程式擴充套件功能。增加了...

物件導向 設計模式

提到設計模式,不得不感謝gof gang of four,四人組 他們1995年出版的 設計模式 一書,第一次將設計模式提公升到理論高度,並將之規範化。書中一共總結了23種基本的設計模式。而這23中設計模式幾乎涵蓋了物件導向設計過程中所有問題的解決方案。書中提到的23種設計模式分別是 1.單例模式 ...

設計模式 物件導向

所謂的設計原則也好,設計模式也罷,無非是在物件導向的前提下產生的。而物件導向的前提是抽象,物件導向的三大特徵是封裝 繼承 多型。為了從本質上理解設計模式,下面我們分析一下這些概念之間的關係。請看下圖 物件導向思想的前提是抽象,從現實世界中抽象出一些物件或者類的共性之後封裝成類或者抽象類或者介面。這些...