設計模式 工廠方法模式

2021-06-16 07:04:23 字數 3084 閱讀 4894

1、factorymethod.h

#ifndef factorymethod_h

#define factorymethod_h

#include #include using namespace std;

class osproduct //產品,product,產品的抽象類

;class windowsproduct : public osproduct //concreteproduct,具體產品實現類

;class linuxproduct : public osproduct //concreteproduct,具體產品實現類

;class oscreator //工廠基類,creator

;//具體工廠

class windowscreator : public oscreator //concretecreator,具體工廠

;class linuxcreator : public oscreator //concretecreator,具體工廠

;//另一種具體工廠:使用模板避免建立多個具體工廠子類

templateclass concretecreator : public oscreator

; virtual osproduct* create()

;protected:

string m_strproducttype;

};#endif // factorymethod_h

2、factorymethod.cpp

#include "factorymethod.h"

#include #include using namespace std;

osproduct::~osproduct(){}

void windowsproduct::start()

void linuxproduct::start()

oscreator::~oscreator(){}

osproduct* windowscreator::create()

osproduct* linuxcreator::create()

3、main.cpp

/*

開發ide:qt creater

開發環境:qt c++

參考**:神秘果:

定義:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法(factory method)使乙個類的例項化延遲到其子類。

也叫虛構造器(virtual constructor)

理解:1.product是工廠方法生產產品的抽象基類。

2.creator是生產產品的工廠物件抽象基類。creator提供建立虛方法即工廠方法factorymeothod()。factorymeothod()由派生類

(concretecreator)具體實現,生產對應的具體產品(concreteproduct)。

3.concreteproduct是繼承product的具體產品。

4.concretecreator是生產對應具體產品(concreteproduct)的具體工廠。它重新實現繼承的工廠方法factorymeothod(),

生產具體產品。

要點:1.工廠方法模式中,工廠和產品的基類和派生類是平行關係。抽象產品(product)對應層次是抽象工廠(creator)。在派生類層次,每個具

體產品(concreteproduct)對應乙個具體工廠(concretecreator)。換句話說,每新增乙個具體產品,就要新增乙個對應的具體工廠。

2.工廠方法的核心是factorymeothod(),每個具體工廠都重新實現該介面,產生具體類物件。

3.工廠方法分離客戶端和具體類的實現。利用子類(即具體工廠),讓子類來決定如何來生產乙個具體產品。這樣,客戶端(即呼叫者)

只需要知道這個類的抽象型別,由子類去和具體產品類打交道。

4.工廠基類中的方法anoperation(),不是工廠方法,只是供具體工廠實現的公共介面(可以說是工廠對產品的使用行為)。但個人認為,

工廠方法只是生產產品,公共介面的重點應該是產品,因此在產品基類裡增加產品使用的公共介面更加實用。

5.工廠方法模式的工廠(creator)若要全域性唯一,可以結合單件(singleton)模式應用。

6.關於簡單工廠(也叫靜態工廠)。工廠方法強調的是「讓子類決定例項化什麼樣的物件」,因為子類知道它們要使用的特定產品。

如果我們將creator和concretecreator的角色合一,並且將工廠方法factorymeothod()靜態化,那麼就退化成了簡單工廠模式

應用:1.工廠方法應用場景:

當乙個類不知道它所必須建立的物件的類的時候。

當乙個類希望由它的子類來指定它所建立的物件的時候。

當類將建立物件的職責委託給多個幫助子類中的某乙個,並且你希望將哪乙個幫助子類是**者這一資訊區域性化的時候。

2.osproduct是產品基類。並且有產品的公共使用介面。

oscreator是工廠基類。模式結構中的產品使用行為介面anoperaion並沒有出現在工廠基類介面中,放在了產品側(start介面)。

具體工廠可以通過繼承oscreator實現,有多少個具體工廠,就要有多少個具體工廠類。

通過c++模板可以避免建立多個具體工廠(模板類concretecreator)。

以上文字說明,從網上整理而來,有可能部分與其他同仁相同,請諒解,希望我們能夠共同交流,謝謝!

*/int main(int argc, char *argv)

運動結果:

=== jhluroom start *****===

create windows…

windows start.

create linux…

linux start.

concretecreator. product type: windows

windows start.

concretecreator. product type: linux

linux start.

=== jhluroom finish _^_ ===

設計模式 工廠方法模式

一 工廠方法 factory method 模式 工廠方法模式的意義是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到工廠子類當中。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角...

設計模式 工廠方法模式

框架的基礎知識 對框架的理解 框架和設計模式的關係 工廠方法模式 定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,factory method使乙個類的例項化延遲到其子類。結構 產品 public inte ce product 具體產品 public class productimpl...

設計模式 工廠方法模式

描述一下工廠方法的概要 簡單工廠模式是要在工廠類中通過資料來做個決策,在工廠類中的多個類中例項化出來其中乙個要用到的類,做運算。而工廠方法模式則是他的乙個聰明的擴充套件,不在工廠類中做決策,而是把這個決策推遲到每個用到他的地方。等待使用的類庫 live類 public abstract class ...