2 GoF 的 23 種設計模式的分類和功能

2022-05-31 01:12:10 字數 2363 閱讀 8484

設計模式有兩種分類方法,即根據模式的目的來分和根據模式的作用的範圍來分。

1. 根據目的來分

根據模式是用來完成什麼工作來劃分,這種方式可分為建立型模式、結構型模式和行為型模式 3 種。

建立型模式:用於描述「怎樣建立物件」,它的主要特點是「將物件的建立與使用分離」。gof 中提供了單例、原型、工廠方法、抽象工廠、建造者等 5 種建立型模式。

結構型模式:用於描述如何將類或物件按某種布局組成更大的結構,gof 中提供了**、介面卡、橋接、裝飾、外觀、享元、組合等 7 種結構型模式。

行為型模式:用於描述類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,以及怎樣分配職責。gof 中提供了模板方法、策略、命令、職責鏈、狀態、觀察者、中介者、迭代器、訪問者、備忘錄、直譯器等 11 種行為型模式。

2. 根據作用範圍來分

根據模式是主要用於類上還是主要用於物件上來分,這種方式可分為類模式和物件模式兩種。

類模式:用於處理類與子類之間的關係,這些關係通過繼承來建立,是靜態的,在編譯時刻便確定下來了。gof中的工廠方法、(類)介面卡、模板方法、直譯器屬於該模式。

物件模式:用於處理物件之間的關係,這些關係可以通過組合或聚合來實現,在執行時刻是可以變化的,更具動態性。gof 中除了以上 4 種,其他的都是物件模式。

表 1 介紹了這 23 種設計模式的分類。

表1gof 的 23 種設計模式的分類表

範圍\目的

建立型模式

結構型模式

行為型模式

類模式工廠方法

(類)介面卡

模板方法、直譯器

物件模式

單例原型

抽象工廠

建造者**

(物件)介面卡

橋接裝飾

外觀享元

組合策略

命令職責鏈

狀態觀察者

中介者迭代器

訪問者備忘錄

3. gof的23種設計模式的功能

前面說明了 gof 的 23 種設計模式的分類,現在對各個模式的功能進行介紹。

單例(singleton)模式:某個類只能生成乙個例項,該類提供了乙個全域性訪問點供外部獲取該例項,其拓展是有限多例模式。

原型(prototype)模式:將乙個物件作為原型,通過對其進行複製而轉殖出多個和原型類似的新例項。

工廠方法(factory method)模式:定義乙個用於建立產品的介面,由子類決定生產什麼產品。

建造者(builder)模式:將乙個複雜物件分解成多個相對簡單的部分,然後根據不同需要分別建立它們,最後構建成該複雜物件。

**(proxy)模式:為某物件提供一種**以控制對該物件的訪問。即客戶端通過**間接地訪問該物件,從而限制、增強或修改該物件的一些特性。

介面卡(adapter)模式:將乙個類的介面轉換成客戶希望的另外乙個介面,使得原本由於介面不相容而不能一起工作的那些類能一起工作。

橋接(bridge)模式:將抽象與實現分離,使它們可以獨立變化。它是用組合關係代替繼承關係來實現,從而降低了抽象和實現這兩個可變維度的耦合度。

裝飾(decorator)模式:動態的給物件增加一些職責,即增加其額外的功能。

外觀(facade)模式:為多個複雜的子系統提供乙個一致的介面,使這些子系統更加容易被訪問。

享元(flyweight)模式:運用共享技術來有效地支援大量細粒度物件的復用。

組合(composite)模式:將物件組合成樹狀層次結構,使使用者對單個物件和組合物件具有一致的訪問性。

模板方法(templatemethod)模式:定義乙個操作中的演算法骨架,而將演算法的一些步驟延遲到子類中,使得子類可以不改變該演算法結構的情況下重定義該演算法的某些特定步驟。

策略(strategy)模式:定義了一系列演算法,並將每個演算法封裝起來,使它們可以相互替換,且演算法的改變不會影響使用演算法的客戶。

命令(command)模式:將乙個請求封裝為乙個物件,使發出請求的責任和執行請求的責任分割開。

狀態(state)模式:允許乙個物件在其內部狀態發生改變時改變其行為能力。

觀察者(observer)模式:多個物件間存在一對多關係,當乙個物件發生改變時,把這種改變通知給其他多個物件,從而影響其他物件的行為。

中介者(mediator)模式:定義乙個中介物件來簡化原有物件之間的互動關係,降低系統中物件間的耦合度,使原有物件之間不必相互了解。

迭代器(iterator)模式:提供一種方法來順序訪問聚合物件中的一系列資料,而不暴露聚合物件的內部表示。

訪問者(visitor)模式:在不改變集合元素的前提下,為乙個集合中的每個元素提供多種訪問方式,即每個元素有多個訪問者物件訪問。

備忘錄(memento)模式:在不破壞封裝性的前提下,獲取並儲存乙個物件的內部狀態,以便以後恢復它。

直譯器(interpreter)模式:提供如何定義語言的文法,以及對語言句子的解釋方法,即直譯器。

23種GoF設計模式的分類

gof設計模式一共有23個。一般可以按目的和作用範圍來進行劃分,具體劃分方法如下 第一,這些模式按目的 即完成什麼樣任務 來劃分為建立型 結構型和行為型這三種模式 第二,按其是用到類上還是物件上來劃分,可以分為類和物件兩種模式。將這兩種分類方法作為縱橫方向,可以將具體的模式分類列乙個表如下。注意 一...

GOF 23種設計模式 怎麼分類

1 建立型模式 前面講過,社會化的分工越來越細,自然在軟體設計方面也是如此,因此物件的建立和物件的使用分開也就成為了必然趨勢。因為物件的建立會消耗掉系統的很多資源,所以單獨對物件的建立進行研究,從而能夠高效地建立物件就是建立型模式要 的問題。這裡有6個具體的建立型模式可供研究,它們分別是 簡單工廠模...

GoF 的 23 種設計模式的分類和功能

一.根據目的來分 通過模式的目的是完成什麼工作可以把軟體設計模式分成建立者模式 結構型模式和行為型模式。1.建立者模式 怎樣建立物件 它的主要特點是 將物件的建立於使用分離 gof中提供了單例 原型 工廠方法 抽象工廠 建造者等 5 種建立型模式。2.結構型模式 如何將類或物件按某種布局組成更大的結...