5 大建立型設計模式總結,20 張圖徹底掌握
來源:mikechen的網際網路架構
設計模式是寫出優秀程式的保障,與架構能力與閱讀原始碼的能力息息相關,對程式設計師來說非常重要,非常值得深入學習。
設計模式是讓物件導向保持結構良好的秘訣。可以說,設計模式是軟體工程的基石,如同大廈的一塊塊磚石一樣。
前面,我們介紹了 7 大設計原則(41張圖解、2萬多字)。
今天我們詳解設計模式的 5 種建立型模式。
設計模式有23種,劃分為三類:建立型模式、結構型模式、行為型模式。
處理物件建立的模式,我們稱為建立型模式。
建立型模式的共同點是:
將系統使用的具體類封裝起來;
隱藏具體類的例項建立和組合方式。
建立型模式分為物件建立型、類建立型。
物件建立型:把類的建立推遲到另一個物件;
類建立型:將物件的建立推遲到子類中。
在設計模式中,有 5 種建立型模式。分別為:單例模式、抽象工廠模式、工廠方法模式、建造者模式、原型模式。
下面逐一詳解。
單例模式(Singleton Pattern)是一種常見的設計模式,確保一個類只有一個例項,並提供一個全域性訪問點以獲取該例項。
單例模式的 UML 類圖:
單例模式的特點:
單例類只能有一個例項。
單例類必須自己建立自己的唯一例項。
單例類必須給所有其他物件提供這一例項。
單例模式的8種實現方式:
餓漢模式
懶漢模式
雙重檢查鎖(Double-Checked Locking)
......
單例模式的完整解析,檢視這篇:
美團一面:會單例模式嗎,寫個單例看看?
單例模式的定義
單例模式的使用原因
單例模式的 8 種實現方式
單例模式的 4 大應用場景
單例模式的優點、缺點
單例模式的選型參考思路
抽象工廠模式(AbstractFactory)是提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。
抽象工廠模式的結構圖:
抽象工廠模式的構成:
抽象工廠(AbstractFactory):宣告瞭用來建立不同產品的方法;
具體工廠(ConcreteFactory):主要是實現抽象工廠中的多個抽象方法,完成具體產品的建立;
抽象產品(AbstractProduct):為每種產品宣告業務方法;
具體產品(Product):定義具體工廠生產的具體產品,並實現抽象產品中定義的業務方法。它同具體工廠之間是多對一的關係。
抽象工廠模式的實現 UML 圖:
假設:
華為和小米生產的手機,分為兩條產品線,一個是老人手機,一個是學生手機。
為了解決增加產品線的問題,我們用抽象工廠模式來實現。
原始碼示例:
......
抽象工廠模式的完整解析,檢視這篇:
3分鐘重溫抽象工廠模式(電商高頻使用)
工廠方法模式是 簡單工廠模式 的進一步抽象和升級,使用頻次也更高。
工廠方法模式實現了可擴充套件,同時滿足開閉原則,解決了簡單工廠模式每次新增新的產品時,都需要修改工廠類的問題。
工廠方法模式定義工廠父類負責定義建立物件的公共介面,而子類則負責生成具體的物件。
工廠方法模式的特點:
構建的都是同一型別的物件(實現相同的介面);且每一類物件對應一個工廠。
工廠方法模式的結構:
工廠方法模式的 4 個重要角色:
Product:抽象產品類。
ConcreteProduct:具體產品類,實現Product介面。
Factory:抽象工廠類,該方法返回一個Product型別的物件。
ConcreteFactory:具體工廠類,返回ConcreteProduct例項。
工廠方法模式的實現:
這裡我們依然沿用《秒懂簡單工廠模式》中手機產品的例子。
原始碼示例:
......
工廠方法模式的完整解析,檢視這篇:
【重溫23種設計模式】之工廠方法模式
原型模式(Prototype Pattern)透過克隆現有物件來建立新物件,避免了頻繁的物件例項化過程,屬於建立型模式。
簡單理解,就是定義一個原型物件作為建立其他物件的基礎,透過克隆原型物件,我們可以建立多個具有相同屬性和行為的新物件。
例如:
孫悟空有個十分牛逼的絕活兒,叫分身術,可以幻化出多個相同的孫悟空。這個幻化出的新的分身,和設計模式中的原型模式是相似的。
原型模式的 UML 類圖:
原型模式的構成:
客戶端(Client):使用具體原型類中的 clone() 方法,來複制新的物件。
抽象原型(Prototype):可以是抽象類或介面,規定了具體原型物件必須實現的 clone() 方法。
具體原型類(ConcretePrototype):實現抽象原型類的 clone() 方法,它是可被複制的物件。
原型模式的實現:
將名片複製到自己的名片庫中,分別用深複製和淺複製來實現。
原始碼示例:
......
原型模式的完整解析,檢視這篇:
重溫23種設計模式(11):原型模式
建造者模式(builder):將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
例如:我們要定製一臺電腦,我們只需要確認配件品牌及型號,而不必知道組裝電腦的這個過程。
建造者模式的 UML 類圖:
建造者模式的 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/70024922/viewspace-2996988/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 51 張圖助你徹底掌握 HTTP!HTTP
- 建立型設計模式對比總結 設計模式(八)設計模式
- 大話 PHP 設計模式--建立型PHP設計模式
- 【轉】JAVA IO 設計模式徹底分析Java設計模式
- 一張圖徹底搞定 explainAI
- 設計模式大總結(六):命令模式設計模式
- 設計模式-建立型設計模式
- PHP設計模式—建立型設計模式PHP設計模式
- JavaScript設計模式之建立型設計模式JavaScript設計模式
- 大話 PHP 設計模式--結構型PHP設計模式
- (Java)設計模式:建立型Java設計模式
- 設計模式-建立型-單例模式設計模式單例
- 一張圖徹底理解Javascript原型鏈JavaScript原型
- 聊一聊設計模式(二)-- 建立型設計模式設計模式
- go語言:徹底掌握emojiGo
- 徹底掌握Python中 * 號Python
- 建立型設計模式——抽象工廠模式設計模式抽象
- 設計模式--建造者模式Builder(建立型)設計模式UI
- 設計模式--工廠模式Factory(建立型)設計模式
- 設計模式--原型模式Prototype(建立型)設計模式原型
- 設計模式總結設計模式
- 設計模式總結(模式篇)設計模式
- 設計模式總結 —— 單例設計模式設計模式單例
- 設計模式-結構型設計模式
- 結構型設計模式設計模式
- JAVA設計模式 5【結構型】代理模式的理解與使用Java設計模式
- JavaScript設計模式之結構型設計模式JavaScript設計模式
- 物件導向-設計模式-建立型物件設計模式
- 設計模式-建立型-工廠方法設計模式
- 設計模式(一)建立型之單例模式設計模式單例
- C++設計模式建立型工廠模式C++設計模式
- 設計模式--單件模式Singleton(建立型)設計模式
- Java設計模式(5)之責任鏈模式學習總結Java設計模式
- JavaScript設計模式總結JavaScript設計模式
- PHP設計模式總結PHP設計模式
- 前端設計模式總結前端設計模式
- 【設計模式總結篇】設計模式
- 兩張圖徹底搞懂MyBatis的Mapper原理!MyBatisAPP