天天看點

《設計模式修煉真經》02 — 23種設計模式及其分類

GOF

在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名為 Design Patterns - Elements of Reusable Object-Oriented Software(中文譯名:設計模式 - 可複用的面向對象軟體元素) 的書,該書首次提到了軟體開發中設計模式的概念。

四位作者合稱 GOF(四人幫,全拼 Gang of Four)。他們所提出的設計模式主要是基于以下的面向對象設計原則。

  • 對接口程式設計而不是對實作程式設計。
  • 優先使用對象組合而不是繼承。

23種設計模式

根據模式是用來完成什麼工作來劃分,這種方式可分為建立型模式、結構型模式和行為型模式 3 種。(本文的設計模式及其分類,以GOF提出的為主)

1、建立型模式

用于描述“怎樣建立對象”,它的主要特點是将對象的建立與使用分離。包括單例、原型、工廠方法、抽象工廠、建造者 ,共5 種建立型模式。

2、結構型模式

用于描述如何将類或對象按某種布局組成更大的結構。包括代理、擴充卡、橋接、裝飾、外觀、享元、組合等,共7 種結構型模式。

3、行為型模式

用于描述類或對象之間怎樣互相協作共同完成單個對象都無法單獨完成的任務,以及怎樣配置設定職責。包括模闆方法、政策、指令、職責鍊、狀态、觀察者、中介者、疊代器、通路者、備忘錄、解釋器,共 11 種行為型模式。

23種設計模式及其分類,如下表:

《設計模式修煉真經》02 — 23種設計模式及其分類

23種設計模式簡述

1、單例(Singleton)模式

某個類隻能生成一個執行個體,該類提供了一個全局通路點供外部擷取該執行個體,其拓展是有限多例模式。

2、原型(Prototype)模式

将一個對象作為原型,通過對其進行複制而克隆出多個和原型類似的新執行個體。

3、工廠方法(Factory Method)模式

定義一個用于建立産品的接口,由子類決定生産什麼産品。

4、抽象工廠(AbstractFactory)模式

提供一個建立産品族的接口,其每個子類可以生産一系列相關的産品。

5、建造者(Builder)模式

将一個複雜對象分解成多個相對簡單的部分,然後根據不同需要分别建立它們,最後建構成該複雜對象。

6、代理(Proxy)模式

為某對象提供一種代理以控制對該對象的通路。即用戶端通過代理間接地通路該對象,進而限制、增強或修改該對象的一些特性。

7、擴充卡(Adapter)模式

将一個類的接口轉換成客戶希望的另外一個接口,使得原本由于接口不相容而不能一起工作的那些類能一起工作。

8、橋接(Bridge)模式

将抽象與實作分離,使它們可以獨立變化。它是用組合關系代替繼承關系來實作,進而降低了抽象和實作這兩個可變次元的耦合度。

9、裝飾(Decorator)模式

動态的給對象增加一些職責,即增加其額外的功能。

10、外觀(Facade)模式

為多個複雜的子系統提供一個一緻的接口,使這些子系統更加容易被通路。

11、享元(Flyweight)模式

運用共享技術來有效地支援大量細粒度對象的複用。

12、組合(Composite)模式

将對象組合成樹狀層次結構,使使用者對單個對象群組合對象具有一緻的通路性。

13、模闆方法(TemplateMethod)模式

定義一個操作中的算法骨架,而将算法的一些步驟延遲到子類中,使得子類可以不改變該算法結構的情況下重定義該算法的某些特定步驟。

14、政策(Strategy)模式

定義了一系列算法,并将每個算法封裝起來,使它們可以互相替換,且算法的改變不會影響使用算法的客戶。

15、指令(Command)模式

将一個請求封裝為一個對象,使送出請求的責任和執行請求的責任分割開。

16、職責鍊(Chain of Responsibility)模式

把請求從鍊中的一個對象傳到下一個對象,直到請求被響應為止。通過這種方式去除對象之間的耦合。

17、狀态(State)模式

允許一個對象在其内部狀态發生改變時改變其行為能力。

18、觀察者(Observer)模式

多個對象間存在一對多關系,當一個對象發生改變時,把這種改變通知給其他多個對象,進而影響其他對象的行為。

19、中介者(Mediator)模式

定義一個中介對象來簡化原有對象之間的互動關系,降低系統中對象間的耦合度,使原有對象之間不必互相了解。

20、疊代器(Iterator)模式

提供一種方法來順序通路聚合對象中的一系列資料,而不暴露聚合對象的内部表示。

21、通路者(Visitor)模式

在不改變集合元素的前提下,為一個集合中的每個元素提供多種通路方式,即每個元素有多個通路者對象通路。

22、備忘錄(Memento)模式

在不破壞封裝性的前提下,擷取并儲存一個對象的内部狀态,以便以後恢複它。

23、解釋器(Interpreter)模式

提供如何定義語言的文法,以及對語言句子的解釋方法,即解釋器。

我的視訊課

下面是我錄制的一些視訊課,歡迎大家圍觀~

​​​《設計模式修煉真經》​​ 設計模式是一套被反複使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總結,代表了最佳的實踐,通常被有經驗的面向對象的軟體開發人員所采用。

本套課程深入介紹了經典的23種設計模式,并加入了自己的感悟,希望大家能夠徹底掌握設計模式,寫出最好的代碼,達到無招勝有招的境界,最終超越這23種設計模式。

​​《徹底搞定JVM》​​​ JVM是Java中重要的也是較難了解的内容;

面試者對JVM的了解程度某種程度上反映了面試者技術深度,是以JVM也是面試時經常考察的内容;

本課程從JVM運作流程、資料運作時區域組成部分、類加載機制、垃圾回收機制、記憶體模型、常見面試題講解等角度出發,幫你徹底搞定JVM,拿下心儀Offer;

​​《Android性能優化參考》​​ 本課程包含了Android中的App啟動優化、UI優化、記憶體優化、圖檔優化、耗電量等常見的性能優化場景,通過學習此課程,你将對整個Android性能優化體系有清晰的認識。

性能優化作為Android進階開發的必備技能,也是大廠面試必考的題目,是展現一個人技術深度最好的試金石。

​​《面試之排序算法》​​ 排序算法是我們面試被問到最多的基礎算法,本課程詳細介紹了七種排序算法,包括插入排序、選擇排序、冒泡排序、謝爾排序、快速排序、堆積排序和二路并歸排序。每種算法都詳細介紹了核心思想、詳細步驟、時間複雜度和代碼實作,希望幫助大家深入了解排序算法,搞定面試!

​​《Android HyBrid App開發實戰》​​ 本課程為Android HyBrid App開發實戰課程,由淺入深,從三種App的曆史和特點開始,介紹了Android WebView的使用、Java和JS互動的原生方式、著名的WebView安全漏洞、JSBridge的原理和使用,最後通過一個網上商城的實戰綜合全部内容,讓同學們掌握并深入了解Android HyBrid App開發。

​​《AI導論》​​​ 介紹人工智能AI的誕生曆史和到現在為止的不同發展階段;介紹了AI領域中常見的名詞概念和其關系,包括機器學習、深度學習、神經網絡結構搜尋 NAS、生成對抗網絡 GAN等;最後對AI發展做出展望。

本課程屬于導論課程,旨在幫助同學們從宏觀層面把握AI,建立AI的知識體系。

​​《Java注解精講》​​​ 本課程詳細介紹了Java中的注解機制,包括注解的定義和分類,注解的使用和自定義,注解的源碼和架構分析;

本課程語言簡單凝練,視訊短小精悍,讓你一次徹底搞懂Java注解!

​​《Java反射精講》​​​ 反射是Java中重要的也是較難了解的内容;

本課程從反射的定義、作用、原理和使用出發,全方位幫你徹底搞定反射;

您的點贊是我前進的動力~