設計模式提公升與加強一

2022-01-29 04:57:42 字數 3446 閱讀 4196

建立模式分為類的建立模式和物件的建立模式兩種。

類的建立模式  類的建立模式使用繼承關係,把類的建立延遲到子類,從而封裝了客戶端將得到哪些具體類的資訊,並且隱藏了這些類的例項是如何建立和放在一起的。

物件的建立模式物件的建立模式則把物件的建立過程動態的委派給另乙個物件,從而動態地決定客戶端將得到哪些具體類的例項,以及這些類的例項是如何被建立和組合在一起的。

組合引用

結構模式可以分為類的結構模式和物件的結構模式兩種。

類的結構模式 類的結構模式使用整合來把類、介面等組合在一起,以形成更大的結構。當乙個類從父類繼承並實現某介面時,這個新的類就把父類的結構和介面的結構結合起來。類的結構模式是靜態的。乙個類的結構模式的典型例子,就是類形式的介面卡模式。

物件的結構模式物件的結構模式描述怎樣把各種不同型別的物件組合在一起,以實現新的功能的方法。物件的結構模式是動態的。

行為模式分為類的行為模式和物件的行為模式兩種。

類的行為模式 類的行為使用整合關係在幾個類之間分配行為。

物件的行為模式 物件的行為模式則使用物件的聚合來分配行為。

物件ab解耦,在建立型、結構型、行為型,有不同的方式,剛開始令我比較迷惑的是「為什麼對於最基本的解耦策略,三種型別模式有不同模式,這樣不重複了嗎?」,但是三個型別模式有不同的目的,對於解耦目的是不同的,應用是不同的,所以不算重複。

gof中共描述了5種建立型模式。

1.工廠方法模式(factory method)

定義乙個介面用於建立物件,但是讓子類決定初始化哪個類。工廠方法把乙個類的初始化下放到子類。

2.抽象工廠模式(abstract factory)

為乙個產品族提供了統一的建立介面。當需要這個產品族的某一系列的時候,可以從抽象工廠中選出相應的系列建立乙個具體的工廠類。

3.單例模式(singleton)

確保乙個類只有乙個例項,並提供對該例項的全域性訪問。

4.建造者模式(builder)

將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

5.原型模式(prototype)

用原型例項指定建立物件的種類,並且通過複製這些原型建立新的物件。

此外,擴充套件的建立型模式還包括如下。

ø   懶惰初始化模式:推遲物件的建立、資料的計算等需要耗費較多資源的操作,只有在第一次訪問的時候才執行。

ø   物件池模式:通過**利用物件避免獲取和釋放資源所需的昂貴成本。

gof中共描述了7種結構型模式。

1.介面卡模式(adapter)

將某個類的介面轉換成客戶端期望的另乙個介面表示。介面卡模式可以消除由於介面不匹配所造成的類相容性問題。

2.裝飾器模式(decorator)

向某個物件動態地新增更多的功能。裝飾器模式是除類繼承外另一種擴充套件功能的方法。

3.**模式(proxy)

為其他物件提供乙個**以控制對這個物件的訪問。

4.外觀模式(facade)

為子系統中的一組介面提供乙個一致的介面,外觀模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。

5.橋接模式(bridge)

將乙個抽象與實現解耦,以便兩者可以獨立變化。

6.組合模式(composite)

把多個物件組成樹狀結構來表示區域性與整體,這樣使用者可以一樣地對待單個物件和物件的組合。

7.享元模式(flyweight)

通過共享以便有效地支援大量小顆粒物件。

此外,擴充套件的結構型模式還包括如下。

ø   單次訪問者(single-serving visitor):優化被分配的執行訪問者,讓它只使用一次然後刪除。

ø   層次訪問者(hierarchical visitors):提供一種方法訪問每個節點層次的資料結構,如一棵樹。

gof中共描述了11種行為型模式。

1.策略模式(strategy)

定義乙個演算法的系列,將其各個分裝,並且使它們有互動性。策略模式使得演算法在使用者使用的時候能獨立改變。

2.模板方法模式(template method)

模板方法模式準備乙個抽象類,將部分邏輯以具體方法及具體構造子類的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。先構建乙個頂級邏輯框架,而將邏輯的細節留給具體的子類去實現。

3.觀察者模式(observer)

在物件間定義乙個一對多的聯絡,當乙個物件改變了狀態時,所有其他相關的物件會被通知並且自動重新整理。

4.迭代子模式(iterator)

提供一種方法順序訪問乙個聚合物件中的各個元素,而又不需暴露該物件的內部表示。

5.責任鏈模式(chain of responsibility)

為解除請求的傳送者和接收者之間的耦合,而使多個物件都有機會處理這個請求,需要將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它。

6.命令模式(command)

將乙個請求封裝為乙個物件,從而使使用者可用不同的請求對客戶進行引數化,對請求排隊或記錄請求日誌,以及支援可取消的操作。

7.備忘錄模式(memento)

備忘錄物件是乙個用來儲存另外乙個物件內部狀態的快照的物件。備忘錄模式的用意是在不破壞封裝的條件下,將乙個物件的狀態捉住,並外部化,儲存起來,從而可以在將來合適的時候把這個物件還原到儲存起來的狀態。

8.狀態模式(state)

讓乙個物件在其內部狀態改變的時候,其行為也隨之改變。狀態模式需要對每乙個系統可能取得的狀態創立乙個狀態類的子類。當系統的狀態變化時,系統便改變所選的子類。

9.訪問者模式(visitor)

封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改,接受這個操作的資料結構可以保持不變。訪問者模式適用於資料結構相對未定的系統,它把資料結構和作用於結構上的操作之間的耦合解脫開,使得操作集合可以相對自由的演化。

10.中介者模式(mediator)

包裝了一系列物件相互作用的方式,使得這些物件不必相互明顯作用,從而使它們可以鬆散偶合。當某些物件之間的作用發生改變時,不會立即影響其他的一些物件之間的作用,保證這些作用可以彼此獨立的變化。

11.直譯器模式(interpreter)

給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,該直譯器使用該表示來解釋語言中的句子。

後來擴充套件的並髮型模式有:

ø   主動物件模式(active object)。

ø   阻礙模式(balking)。

ø   雙重檢查鎖定(double checked locking)。

ø   守衛模式(guarded)。

ø   領導者/追隨者模式(leaders/followers)。

ø   監測物件模式(monitor object)。

ø   讀寫鎖模式(read write lock)。

ø   排程模式(scheduler)。

後來擴充套件的執行緒池模式有:

ø   執行緒特定儲存模式(thread-specific storage)。

ø   反應器(reactor)。

從設計模式怎樣提公升設計

設計模式是一種非常有用的設計參照,基本上每次去讀設計模式的內容總是會獲得新的體會。但是有沒有新的模式呢?我想,這個大概是有的,不過新的模式產生估計會非常困難。在編碼一段時間之後,大概在一年或者兩年之後,我們一般都在想,可不可以把編碼做的更好一些,讓別人更加容易閱讀,更加好維護,更加好修改。懷著這種簡...

設計模式與抽象 一

設計模式 無數碼農前人在實際的生產專案中經過不斷的踩坑 爬坑 修坑的經歷總結出來的經驗教訓,經過抽象之後表達成的概念。理解 不好理解,實際上並不是你看不懂,而是你不明白為何要如此 故弄玄虛 這個很好明白,等你真正經歷大型專案開發 迭代 重構 甚至重寫之後,你就會贊同這些能寫出設計模式的人,是多麼的 ...

設計模式與足球(一)

建立型模式 工廠方法模式 factory method 定義乙個用於建立物件的介面,讓子類決定將哪乙個類例項化。工廠方法模式使乙個類的例項化延遲到其子類。2 抽象工廠模式 adidas工廠除了生產adidas足球外,還生產adidas球鞋 球服 球襪 adidas is all in nike工廠也...