1. 程式人生 > 其它 >【設計模式開篇】六大設計原則

【設計模式開篇】六大設計原則

一、設計模式簡介

設計模式是一套被反覆使用、多人知曉、分類編目的程式碼設計經驗的總結,可以解決特定場景的問題的一系列方法。

二、為什麼學習設計模式

對於那些在維護一個老專案的人應該深有體會,有的時候,一個很簡單的需求,或者說,本來應該是很快就可以實現的需求,但是由於系統當初設計的時候沒有考慮這些需求的變化,或者隨著需求的累加,系統越來越臃腫,導致隨便修改一處都可能造成不可預料的後果,或者是我本來可以修改下配置檔案或者改一處程式碼就可以解決的事情,結果需要修改N處程式碼才可以達到我的目的。

以上都是非常可怕的後果,這些我已經深深體會過了。

三、設計模式的好處和注意點

設計模式可以幫助我們改善系統的設計,增強系統的健壯性、拓展性。

但是,過多的模式也會讓系統變得複雜,所以在第一次設計一個系統時,請你將確定的變化點處理掉,不確定的變化點千萬不要假設它存在,如果你曾這樣做過,那麼請改變你的思維,讓這些虛無的變化點在你腦子中徹底消失。

因為我們完全可以使用另一種手法來容納我們的變化點,那就是重構,不過這是我們在討論過設計模式之後的事情,現在我們就是要把這些設計模式全部理解,來鍛鍊我們的思維。

四、指導原則:六大原則

這些原則是指導模式的規則,注意,原則是死的,人是活的,所以並不是要完完全全遵守這些原則,資料庫設計也可以逆正規化,只是在可能的情況下,儘量遵守。

① 單一職責原則:每個類都只負責單一的功能,切不可太多,而且儘可能把一個功能做到極致

② 裡式轉換原則:這個原則表達的意思是一個子類應該可以替換掉父類而且可以正常工作

③ 介面隔離原則:也稱為介面最小化原則,強調的是一個介面擁有的行為應該儘可能的小

④ 依賴倒置原則:這個原則描述的是高層次模組不應該依賴於低層次的模組,二者都應該依賴於抽象,抽象不應該依賴於細節,細節應該依賴於抽象

⑤ 迪米特原則:又叫最少知道原則,一個類對於其他類知道的越少越好,就是說一個物件應當對其他物件有儘可能少的瞭解,只和朋友通訊,不和陌生人說話

⑥ 開閉原則:對修改關閉,對拓展開放

五、依賴倒置詳解

上層模組不應該依賴底層模組,它們都應該依賴於抽象。
抽象不應該依賴於細節,細節應該依賴於抽象。

首先,這個原則聽起來很像是

“針對介面程式設計,不針對實現程式設計”,不是嗎?的確很相似,然而這裡更強調“抽象”。

在依賴倒置原則中的倒置指的是和一般OO設計的思考方式完全相反。

舉個例子,現在你需要實現一個比薩店,你第一件想到的事情是什麼?我想到的是一個比薩店,裡面有很多具體的比薩,如:芝士比薩、素食比薩、海鮮比薩……

比薩店是上層模組,比薩是下層模組,如果把比薩店和它依賴的物件畫成一張圖,看起來是這樣:

沒錯!先從頂端開始,然後往下到具體類,但是,正如你看到的你不想讓比薩店理會這些具體類,要不然比薩店將全都依賴這些具體類。現在“倒置”你的想法……別從上層模組比薩店開始思考,而是從下層模組比薩開始,然後想想看能抽象化些什麼。你可能會想到,芝士比薩、素食比薩、海鮮比薩都是比薩,所以它們應該共享一個Pizza介面。對了,你想要抽象化一個Pizza。好,現在回頭重新思考如何設計比薩店。

圖一的依賴箭頭都是從上往下的,圖二的箭頭出現了從下往上,依賴關係確實倒置

另外,此例子也很好的解釋了上層模組不應該依賴底層模組,它們都應該依賴於抽象。,在最開始的設計中,高層模組PizzaStroe直接依賴低層模組(各種具體的Pizaa,調整設計後,高層模組和低層模組都依賴於抽象(Pizza

六、OO設計中的類圖