設計模式 工廠方法

2021-09-20 05:46:27 字數 1556 閱讀 6686

工廠方法模式最初的定義出現於《設計模式》(addison-wesley,1994)

工廠方法模式:定義建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使得乙個類的例項化延遲到其子類。

工廠方法模式的類圖如下:

工廠方法類圖

工廠方法也成為虛構造器(virtual constructor)。它適用於這種情況:乙個類無法預期需要生成哪個類的物件,想讓其子類來指定所生成的物件。

抽象的product(產品)定義了工廠方法建立的物件的介面。concreteproduct實現了product介面。creator定義了返回product物件的工廠方法。它也可以為工廠方法定義乙個預設實現,返回預設concreteproduct物件。creator的其他操作可以呼叫此工廠方法建立product物件。concreteproduct是creator的子類。它過載了工廠方法,以返回concreteproduct的例項。

工廠方法的最初定義好像專注於讓子類決定建立什麼物件。有一種變體,抽象類使用工廠方法建立其私有子類或者任何其他類的物件(抽象工廠模式)。(接下來的文章會詳細描述抽象工廠模式)

何時使用工廠方法模式?

在以下情形,你自然會想到使用工廠方法模式:

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

類想讓其子類決定是在執行時建立什麼;

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

在cocoa touch框架中應用工廠方法

工廠方法在cocoa touch框架中幾乎隨處可見。大家知道常見的兩步物件建立法[[someclass alloc] init]。有時,我們會注意到有一些「便利」方法返回類的例項。例如,nsnumber有很多numberwith*方法,其中有兩個是numberwithbool:numbberwithchar:。它們是類方法,也就是說,我們向nsnumber傳送[nsnumber numberwithbool:bool][nsnumber numbberwithchar:char],以獲得與傳入引數同型別的各種nsnumber例項。與如何建立nsnumber的具體例項有關的所有細節,都是 由nsnumber的類工廠方法負責。

[nsnumber numberwithbool:bool]的情況是,方法接受值bool,並把nsnumber的內部子類(實際上是nscfboolean類)的乙個例項初始化,讓他能夠反映傳入的值bool.

附上工廠方法模式的demo:designpattern_factorymethod

設計模式 簡單工廠 工廠方法 抽象工廠方法模式

簡介 工廠方法模式分為 簡單工廠模式 工廠方法模式 抽象工廠方法模式 簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的實 uml圖示例 public class ...

設計模式 工廠方法

設計模式 工廠方法 工廠方法與抽象方法 面向介面程式設計可以提高 的靈活性 可以橫向擴充 切忌不能使用面向實現的程式設計,這樣做不便於以後業務的擴充和 的靈活性。工廠方法 就是把 new class 的過程交給 factory來做.構造類的細節不需要我們知道。比如 構造乙個 list 我們可以這樣寫...

設計模式 工廠方法

簡單工廠針對擴充套件時需要修改 違反了ocp 開閉原則 而工廠方法模式在擴充套件時,更滿足ocp。當然比較簡單工廠模式,工廠方法模式有一組實現了相同介面的工廠類,而簡單工廠模式就只有乙個工廠類。和簡單工廠方法一樣,還是以生成汽車為例子。定義要生成的物件的公共介面 public inte ce car...