工廠方法(Factory method)

2021-09-14 01:10:32 字數 1945 閱讀 1944

一、本質:

是一種實現了「工廠」概念的物件導向設計模式,處理在不指定物件具體型別的情況下建立物件的問題。

工廠方法模式的實質是:定義乙個建立物件的介面,但讓實現這個介面的類來決定例項化哪個類。工廠方法讓類的例項化推遲到子類中進行。

二、要解決的問題:

是物件的建立時機,它提供了一種擴充套件的策略,很好地符合了開放封閉原則。

工廠方法也叫做虛構造器(virtual constructor).又稱為靜態工廠方法(static factory method)模式,它屬於類建立型模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。

三、安全性:

工廠方法建立物件與直接建立新的物件相比,工廠方法模式讓客戶程式可以要求由工廠方法建立的物件擁有一組共同的行為。所以往類層次結構中引入新的具體產品並不需要修改客戶端**,因為返回的任何具體物件的介面都跟客戶端一直在用的從前的介面相同。

四、優點:

1:將物件的建立和物件本身業務處理分離可以降低系統的耦合度,使得兩者修改起來都相對容易。

2:在呼叫工廠類的工廠方法時,由於工廠方法是靜態方法,使用起來很方便,可通過類名直接呼叫,而且只需要傳入乙個簡單的引數即可,在實際開發中,還可以在呼叫時將所傳入的引數儲存在xml等格式的配置檔案中,修改引數時無須修改任何源**。

3:簡單工廠模式最大的問題在於工廠類的職責相對過重,增加新的產品需要修改工廠類的判斷邏輯,這一點與開閉原則是相違背的。

4:簡單工廠模式的要點在於:當你需要什麼,只需要傳入乙個正確的引數,就可以獲取你所需要的物件,而無須知道其建立細節。

五、使用場景

1:編譯時無法準確預期要建立的物件的類;

2:類想讓子類決定在執行時建立什麼;

3:類有若干輔助類為其子類,而你想將返回哪個子類這一資訊區域性話;

工廠方法在cocoatouch中的應用

工廠方法在cocoatouch中幾乎隨處可見,也稱作「類簇」。在objective-c中常見的兩步物件建立法[[someclass alloc] init].但是還有一些便利的建立方法。例如,nsnumber有很多numberwith*方法;其中有兩個是numberwithbool:和numberwithchar:。它們是類方法,也就是說我們向nsnumber傳送[[nsnumber numberwithbool:bool]]與[[nsnumber numberwithchar:char]],以獲得與傳入引數同型別的各種nsnumber例項。與如何建立nsnumber的具體子型別的例項有關的所有細節,都有nsnumber的類工廠方法負責。[[nsnumber numberwithbool:bool]]的情況是,方法接受值bool,並把nsnumber的內部子類的乙個例項初始化,讓它能夠反應傳入的值。

優點1:乙個呼叫者想建立乙個物件,只要知道其名稱就可以了。

2:擴充套件性高,如果想增加乙個產品,只要擴充套件乙個工廠類就可以。

3:遮蔽產品的具體實現,呼叫者只關心產品的介面。

缺點每次增加乙個產品時,都需要增加乙個具體類和物件實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的複雜度,同時也增加了系統具體類的依賴。這並不是什麼好事。

下面的**通過 drinking 的工廠方法將可樂和啤酒兩個私有類進行了類簇化:

class drinking 

class func drinking(name: string) -> drinking

return drinking

}}class coke: drinking

}class beer: drinking

}let coke = drinking.drinking(name: "coke")

coke.color // black

let beer = drinking.drinking(name: "beer")

beer.color // yellow」

設計模式之工廠方法(Factory Method)

在軟體開發過程中,有很多人抱怨著需求的變化,是需求沒有做好麼?不是的,其實需求變化在軟體開發中是不可避免的。做人也是一樣,出了問題要先從自己這邊找原因,然後想辦法解決。我們身為程式設計師,向使用者和需求分析師們抱怨 其實,任何一種抱怨都是沒有意義的 是沒有意義的。究竟怎樣解決這個問題呢?我身邊很多人...

簡單工廠方法,工廠方法,抽象工廠方法

以大話設計模式計算器為例 簡單工廠方法是由具體執行功能類,工廠類,客戶端構成,工廠類有case語句,負責建立不同的類,客戶端呼叫工廠類裡面的工廠方法,工廠類的工廠方法根據客戶端傳進去的引數new相應的類的物件返回給客戶端,客戶端得到返回的物件用該物件初始化該物件的成員變數最後呼叫該物件的方法執行計算...

工廠方法模式 工廠方法模式

工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...