簡單工廠設計模式的思路,決定了每次新增一種具體的產品時,就需要更改工廠內部的產品構成。因為開閉原則,決定了對外開放介面,對內封閉的思路,工廠方法設計模式,不在使用工廠類統一建立所有的具體產品,不同工廠針對不同的產品,新增產品時,需要同時新增對應的工廠。
工廠方法模式:定義乙個用於建立物件的介面,但是讓子類決定將哪乙個類例項化。工廠方法模式讓乙個類的例項化延遲到其子類。
從上述工廠方法模式的介紹中,可以看出此種模式由以下幾個主要成員組成:
對應的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 ...