5 大建立型設計模式總結,20 張圖徹底掌握

帶你聊技術發表於2023-11-24

來源:mikechen的網際網路架構

設計模式是寫出優秀程式的保障,與架構能力與閱讀原始碼的能力息息相關,對程式設計師來說非常重要,非常值得深入學習。

設計模式是讓物件導向保持結構良好的秘訣。可以說,設計模式是軟體工程的基石,如同大廈的一塊塊磚石一樣。

前面,我們介紹了 7 大設計原則(41張圖解、2萬多字)

今天我們詳解設計模式的 5 種建立型模式

5 大建立型設計模式總結,20 張圖徹底掌握



01
  建立型模式的概述

設計模式有23種,劃分為三類:建立型模式、結構型模式、行為型模式。

5 大建立型設計模式總結,20 張圖徹底掌握


處理物件建立的模式,我們稱為建立型模式


建立型模式的共同點是:


  • 將系統使用的具體類封裝起來;

  • 隱藏具體類的例項建立和組合方式。


建立型模式分為物件建立型、類建立型。

  • 物件建立型:把類的建立推遲到另一個物件;

  • 類建立型:將物件的建立推遲到子類中。



02
  5 大建立型模式

在設計模式中,有 5 種建立型模式。分別為:單例模式、抽象工廠模式、工廠方法模式、建造者模式、原型模式。

5 大建立型設計模式總結,20 張圖徹底掌握

下面逐一詳解。


03
  單例模式

單例模式(Singleton Pattern)是一種常見的設計模式,確保一個類只有一個例項,並提供一個全域性訪問點以獲取該例項。

單例模式的 UML 類圖:

5 大建立型設計模式總結,20 張圖徹底掌握

單例模式的特點:

  • 單例類只能有一個例項。

  • 單例類必須自己建立自己的唯一例項。

  • 單例類必須給所有其他物件提供這一例項。


單例模式的8種實現方式:

5 大建立型設計模式總結,20 張圖徹底掌握

餓漢模式

5 大建立型設計模式總結,20 張圖徹底掌握

懶漢模式

5 大建立型設計模式總結,20 張圖徹底掌握

雙重檢查鎖(Double-Checked Locking)

5 大建立型設計模式總結,20 張圖徹底掌握

......

單例模式的完整解析,檢視這篇:

美團一面:會單例模式嗎,寫個單例看看?

  1. 單例模式的定義

  2. 單例模式的使用原因

  3. 單例模式的 8 種實現方式

  4. 單例模式的 4 大應用場景

  5. 單例模式的優點、缺點

  6. 單例模式的選型參考思路


04
  抽象工廠模式

抽象工廠模式(AbstractFactory)是提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。


抽象工廠模式的結構圖:

5 大建立型設計模式總結,20 張圖徹底掌握

  • 抽象工廠模式的構成:


  • 抽象工廠(AbstractFactory):宣告瞭用來建立不同產品的方法;

  • 具體工廠(ConcreteFactory):主要是實現抽象工廠中的多個抽象方法,完成具體產品的建立;

  • 抽象產品(AbstractProduct):為每種產品宣告業務方法;

  • 具體產品(Product):定義具體工廠生產的具體產品,並實現抽象產品中定義的業務方法。它同具體工廠之間是多對一的關係。


抽象工廠模式的實現 UML 圖:

5 大建立型設計模式總結,20 張圖徹底掌握

假設:

華為和小米生產的手機,分為兩條產品線,一個是老人手機,一個是學生手機。

為了解決增加產品線的問題,我們用抽象工廠模式來實現。

原始碼示例:

......

抽象工廠模的完整解析,檢視這篇

3分鐘重溫抽象工廠模式(電商高頻使用)


05
  工廠方法模式

工廠方法模式 簡單工廠模式 的進一步抽象和升級,使用頻次也更高。

工廠方法模式實現了可擴充套件,同時滿足開閉原則,解決了簡單工廠模式每次新增新的產品時,都需要修改工廠類的問題。

5 大建立型設計模式總結,20 張圖徹底掌握

工廠方法模式定義工廠父類負責定義建立物件的公共介面,而子類則負責生成具體的物件。

工廠方法模式的特點:

構建的都是同一型別的物件(實現相同的介面);且每一類物件對應一個工廠。

工廠方法模式的結構:

5 大建立型設計模式總結,20 張圖徹底掌握


工廠方法模式的 4 個重要角色:

5 大建立型設計模式總結,20 張圖徹底掌握

  • Product:抽象產品類。

  • ConcreteProduct:具體產品類,實現Product介面。

  • Factory:抽象工廠類,該方法返回一個Product型別的物件。

  • ConcreteFactory:具體工廠類,返回ConcreteProduct例項。


工廠方法模式的實現:


這裡我們依然沿用《秒懂簡單工廠模式》中手機產品的例子。


原始碼示例:

......

工廠方法模式的完整解析,檢視這篇

【重溫23種設計模式】之工廠方法模式

5 大建立型設計模式總結,20 張圖徹底掌握


06
  原型模式

原型模式(Prototype Pattern)透過克隆現有物件來建立新物件,避免了頻繁的物件例項化過程,屬於建立型模式。

簡單理解,就是定義一個原型物件作為建立其他物件的基礎,透過克隆原型物件,我們可以建立多個具有相同屬性和行為的新物件。

例如:

孫悟空有個十分牛逼的絕活兒,叫分身術,可以幻化出多個相同的孫悟空。這個幻化出的新的分身,和設計模式中的原型模式是相似的。

5 大建立型設計模式總結,20 張圖徹底掌握

原型模式的 UML 類圖:

5 大建立型設計模式總結,20 張圖徹底掌握

原型模式的構成:

  • 客戶端(Client):使用具體原型類中的 clone() 方法,來複制新的物件。


  • 抽象原型(Prototype):可以是抽象類或介面,規定了具體原型物件必須實現的 clone() 方法。


  • 具體原型類(ConcretePrototype):實現抽象原型類的 clone() 方法,它是可被複制的物件。


原型模式的實現:

將名片複製到自己的名片庫中,分別用深複製和淺複製來實現。

原始碼示例:

......

原型模式的完整解析,檢視這篇

重溫23種設計模式(11):原型模式


07
  建造者模式

建造者模式(builder):將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

例如:我們要定製一臺電腦,我們只需要確認配件品牌及型號,而不必知道組裝電腦的這個過程。

5 大建立型設計模式總結,20 張圖徹底掌握

建造者模式的 UML 類圖:

5 大建立型設計模式總結,20 張圖徹底掌握

建造者模式的 4 個重要角色:

  • Product(產品類) :具體需要生成的類物件;
  • Builder(抽象建造者類):為我們需要生成的類物件,構建不同的模組屬性,即:公開構建產品類的屬性,隱藏產品類的其他功能;
  • ConcreteBuilder(具體建造者類):抽象 Builder 類的實現類,實現抽象 Builder 類定義的所有方法,並且返回一個組建好的物件;
  • Director(指揮者類):用於統一組裝流程,確定構建我們的類物件具體有哪些模組屬性,在實際應用中可以不需要這個角色,直接透過 client 處理。


建造者模式的應用場景:

1)建造者模式在 Java 原始碼中的體現,較為典型的就是 StringBuilder。






@Overridepublic StringBuilder append(CharSequence s) {    super.append(s);// 實現過程略    return this;}

......


建造者模式的完整解析,檢視這篇


詳解建造者模式(含圖例、UML類圖、原始碼示例等)



總結
  

透過本文,我們瞭解並掌握了設計模式中的 5大建立型模式,包括它們的概念、原理、應用場景、優缺點、實現方式等。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024923/viewspace-2996695/,如需轉載,請註明出處,否則將追究法律責任。

相關文章