設計模式之2 工廠方法模式

2021-08-27 10:41:55 字數 2417 閱讀 4202

之前有篇部落格,介紹了「簡單工廠模式

」。這篇部落格簡要的介紹一下「工廠方法模式」。

簡介

定義乙個使用者建立物件的介面,讓子類決定例項哪乙個類。factory method使乙個類的例項化延遲到子類。----------《設計模式》gof

核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。

結構

舉例

之前《設計模式之0——簡單工廠模式》用了以下例子,現仍舉這個例子,但以工廠方法來實現。:

某電視機廠專為各種電視機品牌代工生產各類電視機。當需要生產海爾電視時,只需要傳參「haier」;當需要生產海信電視時,只需傳入「hisense」。工廠根據傳入引數的不同返回不同品牌的電視機。

類圖

抽象產品類tv(電視機類):

public inte***ce tv

具體產品類hisensetv:

public class hisensetv:tv

}

具體產品類haiertv:

public class haiertv:tv

}

抽象產品工廠介面:

inte***ce itvfactory

具體產品工廠haiertvfactory:

class haiertvfactory : itvfactory

}

具體產品工廠hisensetvfactory:

class hisensetvfactory : itvfactory

}

客戶端**:

class program

}

對比簡單工廠模式簡述簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。

工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現具體類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯判斷移到了客戶端**來進行。想要加功能,本來是改工廠類的,現在是修改客戶端。

詳述

1. 結構複雜度

從這個角度比較,顯然簡單工廠模式要佔優。簡單工廠模式只需乙個工廠類,而工廠方法模式的工廠類隨著產品類個數增加而增加,這無疑會使類的個數越來越多,從而增加了結構的複雜程度。

2.**複雜度

**複雜度和結構複雜度是一對矛盾,既然簡單工廠模式在結構方面相對簡潔,那麼它在**方面肯定是比工廠方法模式複雜的了。簡單工廠模式的工廠類隨著產品類的增加需要增加很多方法(或**),而工廠方法模式每個具體工廠類只完成單一任務,**簡潔。

3.客戶端程式設計難度

工廠方法模式雖然在工廠類結構中引入了介面從而滿足了ocp(開放-封閉原則),但是在客戶端編碼中需要對工廠類進行例項化。而簡單工廠模式的工廠類是個靜態類,在客戶端無需例項化,這無疑是個吸引人的優點。

4.管理上的難度

這是個關鍵的問題。眾所周知,工廠方法模式完全滿足ocp,即它有非常良好的擴充套件性。那是否就說明了簡單工廠模式就沒有擴充套件性呢?答案是否定的。簡單工廠模式同樣具備良好的擴充套件性——擴充套件的時候僅需要修改少量的**(修改工廠類的**)就可以滿足擴充套件性的要求了。儘管這沒有完全滿足ocp,但有時候不需要太拘泥於設計理論,可視情況而定。

5.維護性角度

然後我們從維護性的角度分析下。假如某個具體產品類需要進行一定的修改,很可能需要修改對應的工廠類。當同時需要修改多個產品類的時候,對工廠類的修改會變得相當麻煩(對號入座已經是個問題了)。反而簡單工廠沒有這些麻煩,當多個產品類需要修改時,簡單工廠模式仍然僅僅需要修改唯一的工廠類(無論怎樣都能改到滿足要求吧?大不了把這個類重寫)。

設計模式之2 工廠方法模式

之前有篇部落格,介紹了 簡單工廠模式 這篇部落格簡要的介紹一下 工廠方法模式 簡介 定義乙個使用者建立物件的介面,讓子類決定例項哪乙個類。factory method使乙個類的例項化延遲到子類。設計模式 gof 核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現...

設計模式之工廠方法模式 2

一 介紹 工廠方法模式又簡稱為工廠模式 factory pattern 又可稱作虛擬構造器模式 virtual constructor pattern 或多型工廠模式 polymorphic factory pattern 工廠方法模式是一種類建立型模式。二 例子 我們為什麼要學習工廠方法模式呢?我...

設計模式2之 簡單工廠模式 工廠方法模式

a 簡單工廠模式概述 又叫靜態工廠方法模式,它定義乙個具體的工廠類負責建立一些類的例項 b 優點 客戶端不需要在負責物件的建立,從而明確了各個類的職責 c 缺點 這個靜態工廠類負責所有物件的建立,如果有新的物件增加,或者某些物件的建立方式不同,就需要不斷的修改工廠類,不利於後期的維護 d 案例演示 ...