23個設計模式

2022-07-26 15:42:11 字數 2193 閱讀 3448

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

根據目的來分

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

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

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

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

根據作用範圍來分

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

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

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

gof的23種設計模式的功能

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

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

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

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

抽象工廠(abstractfactory)模式:提供乙個建立產品族的介面,其每個子類可以生產一系列相關的產品。

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

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

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

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

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

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

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

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

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

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

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

職責鏈(chain of responsibility)模式:把請求從鏈中的乙個物件傳到下乙個物件,直到請求被響應為止。通過這種方式去除物件之間的耦合。

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

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

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

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

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

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

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

23個設計模式 Observer

觀察者繼承基類,並實現其中的純虛函式 在更新資料的類中儲存了基類的指標,通過該指標就可以呼叫虛函式,進行顯示 另乙個類,給操作類傳遞引數,並呼叫該操作類的方法 新增 刪除 觀察者 include include include using namespace std class iprogress ...

23個設計模式(課1)

在b站學習設計模式,主講人是李建忠老師,講解的很不錯,結合 一起講,比較容易理解。知識點 的思維 人類的思維,包含兩個主要方向 底層思維和抽象思維。底層就是 是如何具體實現,如圖在硬體上實現的原理和方法 抽象就是把具有相同屬性的物件,歸納到同乙個類別中,也就是抽象,比如各種圖形 圓形,矩形,三角形。...

23個設計模式定義助記

1,命令模式 定義 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化,對請求排隊或記錄請求日誌,以及支援可撤銷的操作。2,觀察者模式 定義 定義物件間的一種一對多的依賴關係。當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。3,模式 定義 為其他物件提供一種 以控...