設計模式(3)工廠方法模式

2021-10-22 15:53:20 字數 2639 閱讀 1623

簡單工廠設計模式的思路,決定了每次新增一種具體的產品時,就需要更改工廠內部的產品構成。因為開閉原則,決定了對外開放介面,對內封閉的思路,工廠方法設計模式,不在使用工廠類統一建立所有的具體產品,不同工廠針對不同的產品,新增產品時,需要同時新增對應的工廠。

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

從上述工廠方法模式的介紹中,可以看出此種模式由以下幾個主要成員組成:

對應的uml圖如下:

//抽象產品類abstractproduct

class

abstractsportproduct

//抽象方法:

void

printname()

;void

play()

;};//具體產品類basketball

class

basketball

:public abstractsportproduct

//具體實現方法

void

printname()

void

play()

};//具體產品類football

class

football

:public abstractsportproduct

//具體實現方法

void

printname()

void

play()

};//具體產品類volleyball

class

volleyball

:public abstractsportproduct

//具體實現方法

void

printname()

void

play()

};//抽象工廠類

class

abstractfactory

;//具體工廠類basketballfactory

class

basketballfactory

:public abstractfactory

abstractsportproduct *

getsportproduct()

};//具體工廠類footballfactory

class

footballfactory

:public abstractfactory

abstractsportproduct *

getsportproduct()

};//具體工廠類volleyballfactory

class

volleyballfactory

:public abstractfactory

abstractsportproduct *

getsportproduct()

};factorymethod.cpp

#include

#include

"factorymethod.h"

using

namespace std;

intmain()

if(product)

fac =

newfootballfactory()

; product = fac-

>

getsportproduct()

;if(fac)

if(product)

fac =

newvolleyballfactory()

; product = fac-

>

getsportproduct()

;if(fac)

if(product)

return0;

}

綜上,可以看出,如果想玩一中體育運動,需要對應的增加乙個工廠即可。由此,相對於簡單工廠模式,工廠方法模式更符合開閉原則。

優點:

工廠方法用於建立客戶所需產品,同時向客戶隱藏某個具體產品類將被例項化的細節,使用者只需關心所需產品對應的工廠;

工廠自主決定建立何種產品,並且建立過程封裝在具體工廠物件內部,多型性設計是工廠方法模式的關鍵;

新加入產品時,無需修改原有**,增強了系統的可擴充套件性,符合開閉原則。

缺點:

新增新產品時需要同時新增新的產品工廠,系統中類的數量成對增加,增加了系統的複雜度,更多的類需要編譯和執行,增加了系統的額外開銷;

工廠和產品都引入了抽象層,客戶端**中均使用的抽象層(abstractfactory和abstractsportproduct ),增加了系統的抽象層次和理解難度。

適用環境:

設計模式 3 工廠方法模式

1.意圖 定義乙個用於建立物件的的介面,讓子類決定例項化哪乙個類.2.適用性 當乙個類不知道它必須所建立的物件的類的時候。當乙個類希望由它的子類來指定它所建立的物件的時候。3.抽象工廠和工廠方法的區別 抽象工廠 模式依賴於 工廠方法 模式的。因此,抽象工廠強調的是前面的動詞 抽象 也就是說,你將工廠...

設計模式 3 工廠方法模式

定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使得乙個類的例項化延遲到了其子類。抽象工廠介面,用於建立計算物件 public inte ce ifactory 抽象計算介面,表示用於實現的業務 public inte ce calculate 具體工廠類,實現抽象工廠介面,返回...

初始設計模式3 工廠方法模式

工廠方法模式,即定義乙個用於建立物件的介面,讓子類決定例項化哪個類。定義抽象產品類 public abstract class product 定義具體產品類 public class conproduct extends product 定義抽象工廠類 public abstract class ...