1. 程式人生 > >設計模式---設計模式的分類

設計模式---設計模式的分類

truct 一個 角度 eve 簡單的 tor 合成 memento 步驟

一: 從目的來看:

創建型(Creational)模式:通常和對象的創建有關,涉及到對象實例化方法(共5種)
結構型(Structural)模式:描述的是如何組合類和對象以獲得更大的結構(共7中)
行為型(Behavioral)模式:用來對類或對象怎樣交互和怎樣分配職責進行描述(共11種)

(一)創建型模式用來處理對象的創建過程,主要包含下面5種

1.工廠方法模式(Factory Method)

定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類中

2.抽象工廠模式(Abstract Factory)

提供一個創建一系列相關或者相互依賴的接口,而無需指定他們具體的類

3.創建者模式(Builder)

將一個復雜的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示

4.原型模式(Prototype)

用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象

5.單例模式(Singleton)

是保證一個類僅有一個實例,並且提供一個訪問他的全局訪問點

(二)結構型模式用來處理類或者對象的組合,主要包含下面7種設計模式

1.代理模式(Proxy)

為其他對象提供一種代理以控制對這個對象的訪問

2.裝飾模式(Decorator)

動態的給一個對象添加一些額外的職責。就增加功能來說,此模式比生成子類更為靈活

3.適配器模式(Adapter)

將一個類的接口轉換為客戶希望的另一個接口,使得原本由於接口不兼容而不能一起工作的那些類可以一起工作

4.橋接模式(Bridge)

抽象部分和實際部分相分離,使得他們都可以獨立的變化

5.組合模式(Composite)

將對象組合成樹形結構以表示“部分--整體”的層次結構。使得用戶對單個對象和組合對象的使用具有一致性

6.外觀模式(Facade)

是為子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用

7.享元模式(Flyweight)

以共享的方式高效的支持大量的細粒度的對象

(三)行為型模式:用來對類或對象怎樣交互和怎樣分配職責進行描述,主要包含11種

1.模板方法模式(Template Method)

使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟

2.命令模式(Command)

是將一個請求封裝為一個對象,從而使你可用不同的請求對客戶端進行參數化;對請求排隊或者記錄請求日誌,以及支持可撤銷的操作

3.責任鏈模式(Chain of Responsibility)

使多個對象都有機會處理請求,從而避免請求的發送者和接受者之間的耦合關系, 將這個對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理他為止。
這使得系統可以在不影響客戶端的情況下動態的重新組織鏈與分配責任

4.策略模式(Strategy)

就是準備一組算法,並將每一個算法封裝起來,使得他們可以互換

5.中介者模式(Mediator)

就是用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。

6.觀察者模式(Observer)

定義了對象間一種一對多的依賴關系,當被觀察者狀態發生變化,它的觀察者們會收到通知並自動更新。

7.備忘錄模式(Memento)

在不破壞封閉的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態

8.訪問者模式(Visitor)

表示一個作用於某對象結構中的各元素的操作,它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。

9.狀態模式(State)

就是對象的行為,依賴於他所處的狀態

10.解釋器模式(Interpreter)

描述了如何為簡單的語言定義一個語法,如何在該語言中表示一個句子,以及如何解釋這些句子

11.叠代器模式(Iterator)

是提供了一種方法順序來訪問一個聚合對象中的各個元素,而又不需要暴露該對象的內部表示

二:從範圍來看

類模式處理類與子類的靜態關系。
對象模式處理對象間的動態關系。

三:從封裝變化角度對模式分類

(一)組件模式

Tempalte Method、Strategy、Observer/Event
模板方法模式,策略模式,觀察者模式

(二)對象創建

Factory Method、Abstract Factory、Prototype、Builder
工廠方法模式,抽象工廠模式,原型模式,創建者模式

(三)接口隔離

Facade、Proxy、Mediator、Adapter
外觀模式,代理模式,中介者模式,適配器模式

(四)數據結構

Composite、Iterator、Chain of Reposibility
組合模式,叠代器模式,責任鏈模式

(五)單一職責

Decorator、Bridge
裝飾器模式,橋接模式

(六)對象性能

Singleton、Flyweight
單例模式,享元模式

(七)行為變化

Command、Visitor
命令模式,訪問者模式

(八)狀態變化

Memento、State
備忘錄模式,狀態模式

(九)領域問題

Interpreter
解釋器模式

四:補充---重構

(一)重構獲得模式 Refactoring to Patterns

1.面向對象設計模式是“好的面向對象設計”,所謂“好的面向對象設計”指的是那些可以滿足“應對變化,提高復用”的設計。
2.現代軟件設計的特征是“需求的頻繁變化”。設計模式的要點是“尋找變化點,然後在變化點處應用設計模式,從而來更好地應對需求的變化”。“什麽時候、什麽地點應用設計模式”比“理解設計模式結構本身”更為重要。
3.設計模式的應用不宜先入為主,一上來就使用設計模式是對設計模式的最大誤用。沒有一步到位的設計模式。敏捷軟件開發實踐提倡“Refactoring ro Patterns”是目前普遍公認的最好的使用設計模式的方法。

(二)重構關鍵技法

靜態              ->          動態
早綁定          ->           晚綁定
繼承             ->           組合
編譯時依賴   ->           運行時依賴
緊耦合          ->           松耦合

設計模式---設計模式的分類