建立型模式之二 工廠方法模式

2021-07-05 16:22:16 字數 1775 閱讀 6789

工廠方法模式(factory method pattern):工廠方法模式又稱為工廠模式,也叫虛擬構造器(virtual constructor)模式或者多型工廠(polymorphic factory)模式,它屬於類建立型模式。在工廠方法模式中,工廠父類負責定義建立產品物件的公共介面,而工廠子類則負責生成具體的產品物件,這樣做得目的是將類的例項化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該例項化哪乙個具體產品類。

工廠方法模式結構圖如圖所示:

工廠方法模式包含如下角色:

1.product(抽象產品)

抽象產品是定義產品的介面,是工廠方法模式所建立物件的超型別,也是產品物件的共同父類或介面。

2.concreteproduct(具體產品)

具體產品實現了抽象產品介面,某種型別的具體產品由專門的具體工廠建立,它們之間一一對應。

3.factory(抽象工廠)

在抽象工廠類中,宣告了工廠方法,用於返回乙個產品,抽象工廠是工廠方法模式的核心,它與應用程式無關。任何在模式中建立物件的工廠類都必須實現該介面。

4.concretefactory(具體工廠)

具體工廠是抽象工廠的子類,實現了抽象工廠中定義的工廠方法,並可由客戶呼叫,返回乙個具體產品類的例項。在具體工廠類中包含與應用程式密切相關的邏輯,並且接受應用程式呼叫以建立產品物件。

工廠方法模式與簡單工廠模式在結構上的區別很明顯,工廠方法類的核心是乙個抽象工廠類,而簡單工廠模式把核心放在乙個具體類上。工廠方法模式之所以有乙個別名叫多型性工廠模式是因為具體工廠類都有共同的介面,或者共同的抽象父類。當系統擴充套件需要新增新的產品物件時,僅僅需要新增乙個具體產品物件以及乙個具體工廠物件,原有工廠物件不需要進行任何修改,也不需要修改客戶端,很好的符合了「開閉原則」。而簡單工廠模式在新增新產品物件後不得不修改工廠方法,擴充套件性也不好。

簡單工廠模式中以電視劇集代工廠類生產電視機,我們還是利用這個例子。該例項類圖如圖所示:

**如下:

// 抽象產品類tv

public

inte***ce

tv // 具體產品類haiertv

public

class

haiertv

implements

tv }

// 具體產品類hisensetv

public

class

hisensetv

implements

tv }

// 抽象工廠類 tvfactory

public

inte***ce

tvfactory

// 具體工廠類haiertvfactory

public

class

haiertvfactory

implements

tvfactory

}// 具體工廠類haiertvfactory

public

class

hisensetvfactory

implements

tvfactory

}// 測試

public

class

client

}

建立型模式 工廠方法模式

目錄 1.工廠方法模式概述 1.1 工廠方法模式概念 1.2 工廠方法模式類圖 2.工廠方法模式實現原理 3.工廠方法模式優缺點 3.1 優點 3.2 缺點 又稱為虛擬構造器 virtual constructor 模式或多型模式,屬於建立型模式。在工廠方法模式中,父類負責定義建立物件的公共介面,而...

建立型模式 工廠方法模式

定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factorymethod使乙個類的例項化延遲到其子類。1.當乙個類不知道它所必須建立的物件的類的時候。2.當乙個類希望由它的子類來指定它所建立的物件的時候。3.當類將建立物件的職責委託給多個幫助子類中的某乙個,並且你希望將哪乙個幫助子類是 者這...

建立型模式 工廠方法模式

在 簡單工廠模式 一節我們介紹了簡單工廠模式,提到了簡單工廠模式違背了開閉原則,而 工廠方法模式 是對簡單工廠模式的進一步抽象化,其好處是可以使系統在不修改原來 的情況下引進新的產品,即滿足開閉原則。優點 缺點 應用場景 工廠方法模式由抽象工廠 具體工廠 抽象產品和具體產品等4個要素構成。本節來分析...