3 3FactoryMethod 工廠方法

2021-09-09 00:17:10 字數 1522 閱讀 7421

意圖:

定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factorymethod使乙個類的例項化延遲到其子類。

其實在抽象工廠模式中,經過改進後的模式就是工廠方法模式,所以不多說了,上uml圖。

通過工廠方法模式的類圖可以看到,工廠方法模式有四個要素:

1.工廠介面。工廠介面是工廠方法模式的核心,與呼叫者直接互動用來提供產品。在實際程式設計中,有時候也會使用乙個抽象類作為與呼叫者互動的介面,其本質上是一樣的。

2.工廠實現。在程式設計中,工廠實現決定如何例項化產品,是實現擴充套件的途徑,需要有多少種產品,就需要有多少個具體的工廠實現。

3.產品介面。產品介面的主要目的是定義產品的規範,所有的產品實現都必須遵循產品介面定義的規範。產品介面是呼叫者最為關心的,產品介面定義的優劣直接決定了呼叫者**的穩定性。同樣,產品介面也可以用抽象類來代替,但要注意最好不要違反黎克特制替換原則。

4.產品實現。實現產品介面的具體類,決定了產品在客戶端中的具體行為。

前文提到的簡單工廠模式跟工廠方法模式極為相似,區別是:簡單工廠只有三個要素,他沒有工廠介面,並且得到產品的方法一般是靜態的。因為沒有工廠介面,所以在工廠實現的擴充套件性方面稍弱,可以算作工廠方法模式的簡化版

舉例說明:

還是舉生產產品的例子吧。乙個工廠生產a,b兩種產品,以後還可能會拓展生產c產品,怎麼安排類的設計模式使得以後的拓展或者使用者額呼叫更加方便——工廠方法模式。

//定義工廠方法所建立的物件的介面

#ifndef _product_h

#define _product_h

class product

public:

virtual ~product(){}

virtual void function() = 0;

};#endif

//實現product介面

#ifndef _concrete_product_a_h

#define _concrete_product_a_h

#include "product.h"

#include using namespace std;

class concreteproducta : public product

當我們的系統需要增加其他新的物件時,我們只需要新增乙個具體的產品和它的建立工廠即可,不需要對原工廠進行任何修改,這樣很好地符合了「開閉原則」。

工廠方法適用場景

1、乙個類不知道它所需要的物件的類。在工廠方法模式中,我們不需要具體產品的類名,我們只需要知道建立它的具體工廠即可。

2、乙個類通過其子類來指定建立那個物件。在工廠方法模式中,對於抽象工廠類只需要提供乙個建立產品的介面,而由其子類來確定具體要建立的物件,在程式執行時,子類物件將覆蓋父類物件,從而使得系統更容易擴充套件。

3、將建立物件的任務委託給多個工廠子類中的某乙個,客戶端在使用時可以無須關心是哪乙個工廠子類建立產品子類,需要時再動態指定。

3 3FactoryMethod 工廠方法

意圖 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factorymethod使乙個類的例項化延遲到其子類。其實在抽象工廠模式中,經過改進後的模式就是工廠方法模式,所以不多說了,上uml圖。通過工廠方法模式的類圖可以看到,工廠方法模式有四個要素 1.工廠介面。工廠介面是工廠方法模式的核心,與...

Factory Method設計模式

一 工廠方法 factory method 模式 工廠方法 factorymethod 模式是類的建立模式,其用意是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類中。工廠方法模式是簡單工廠模式的進一步抽象和推廣。由於使用了多型性,工廠方法模式保持了簡單工廠模式的優點,而且克服了它的缺點。在...

工廠模式(Factory Method

意圖 工廠方法模式 factory method pattern 工廠方法模式又稱為 工廠模式 也叫虛擬構造器 virtual constructor 模式或者 多型模式 屬於類的建立型模式。在工廠方法模式中,父類負責定義建立物件 的公共介面,而子類則負責生成具體的物件,這樣做的目的是將類的例項化操...