1. 程式人生 > >初識設計模式(工廠模式 總)

初識設計模式(工廠模式 總)

不同的 www. 集合 拓展 繼承 開放 操作符 創建 必須

前言:繼續學習設計模式,前面學習了策略模式、觀察者模式、裝飾者模式,今天學習工廠模式。除了使用 new 操作符之外,還有更多制造對象的方法,比如下面講到的簡答工廠模式、工廠方法模式、抽象方法模式。轉載請註明出處:https://www.cnblogs.com/yuxiaole/p/9276396.html

一、簡單工廠模式

詳見:https://www.cnblogs.com/yuxiaole/p/9280695.html

二、工廠方法模式

定義:工廠方法模式(FACTORY METHOD)是一種常用的對象創建型設計模式,此模式的核心精神是封裝類中不變的部分,提取其中個性化善變的部分為獨立類,通過依賴註入以達到解耦、復用和方便後期維護拓展的目的。它的核心結構有四個角色,分別是抽象工廠;具體工廠;抽象產品;具體產品。

使用的設計原則:依賴倒置原則(要依賴抽象,不要依賴具體類)。對修改關閉,對擴展開放。

類圖:

技術分享圖片

總結:

  1、工廠方法模式定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到子類。

  2、工廠方法,可以接受傳參(稱為“參數化工廠方法”),根據傳入的參數不同創建不同的對象。也可以不接受傳參,只產生一種對象,不需要參數化。

  3、利用字符串傳參,有點危險,萬一拼錯,可能會造成所謂的“運行時錯誤”,所以避免方式為在編譯時期就將參數的錯誤挑出來。比如:可以創建代表參數類型的對象、使用常量、枚舉 enum。

簡單工廠和工廠方法模式的區別?

  1、工廠方法中的子類的確看起來很想簡單工廠。簡單工廠把全部的事情,在一個地方處理完了,然而工廠方法模式卻是創建一個框架,讓子類決定要如何實現。

  2、簡單工廠,不具備工廠方法模式的彈性,因為簡單工廠不能變更正在創建的產品。

簡單工廠和工廠方法模式的優點

  1、將創建對象的代碼集中在一個對象或方法中,可以避免代碼的重復,並且更方便以後的維護,同時解耦。這也意味著客戶在實例化對象時,只會依賴於接口,而不是具體類。

  2、讓代碼更具有彈性,可以應對未來的發展。

三、依賴倒置原則

貼上書上的一段話:

 技術分享圖片

技術分享圖片

四、抽象工廠模式

定義:抽象工廠模式提供一個接口,用於創建相關或依賴對象的家族,而不需要明確指定具體類。

類圖:

技術分享圖片

抽象工廠和工廠方法的區別

  1、都是負責創建對象,但工廠方法用的是繼承,而抽象工廠是通過對象的組合。

  2、利用工廠方法創建對象,需要擴展一個類,並覆蓋它的工廠方法(創建對象)。整個工廠方法模式,就是通過子類來創建對象。用這種做法,客戶只需要知道他們所使用的抽象類型就可以了,而由子類來負責決定具體類型。所以,換句話說,工廠方法模式只負責將客戶從具體類型中解耦出來。

  3、抽象工廠也做到了將客戶從具體類型中解耦出來,只是方式不一樣。抽象工廠提供一個用來創建一個產品家族的抽象類型,這個類型的子類定義了產品被產生的方法。要想使用這個工廠,必須先實例化它,然後將它傳入一些針對抽象類所寫的代碼中。

  4、抽象工廠可以把一群相關的產品集合起來。當需要創建產品家族和想讓制造的相關產品集合起來時,可以使用抽象工廠

  5、當需要把客戶代碼從需要實例化的具體類中解耦,或者如果目前還不知道將來需要實例化哪些具體類時,可以使用工廠方法。使用工廠方法很簡單,只需要繼承,然後實現父類的工廠方法即可。

  6、抽象工廠的方法經常以工廠方法模式的方法實現。

五、全文總結

  1、所有的工廠都是用來封裝 對象的創建。

  2、簡單工廠,雖然不是真正的設計模式,但仍不失為一個簡單的方法,可以將客戶程序從具體類中解耦。

  3、工廠方法模式使用繼承:把對象的創建委托給子類,子類實現工廠方法來創建對象。

  4、抽象工廠使用對象組合:對象的創建被實現在工廠接口所暴露出來的方法中。

  5、所有工廠模式都通過減少應用程序和具體類之間的依賴促進松耦合。

  6、工廠方法允許類將實例化延遲到子類進行。

  7、抽象工廠創建相關的對象家族,而不需要依賴他們的具體類。

  8、依賴倒置原則,指導我們避免依賴具體類型,而要盡量依賴抽象。

  9、工廠是很很有威力的技巧,幫助我們針對抽象編程,而不要針對具體類編程。

轉載請註明出處:https://www.cnblogs.com/yuxiaole/p/9276396.html

參考書籍:《Head First 設計模式》《大話設計模式》

初識設計模式(工廠模式 總)