工廠模式
- 工廠模式
- 介紹
- 示例
- 示例使用
- 運行結果
- 工廠模式與簡單工廠模式區別
工廠模式
工廠模式在簡單工廠模式的基礎之上進行了改進。當需要生產的產品種類增加,可以通過新增子類工廠來生產,沒有破壞程序設計原則中的開放封閉原則。
介紹
工廠模式先抽象出一個抽象工廠,再子類化抽象工廠,將對應產品對象的創建放在子類工廠中。也就是一個子工廠負責生產一種產品,即具體的產品對象由對應的具體的子工廠創建。當產品種類增加,只需增加新的子工廠來生產,遵守開放封閉原則。
示例
本示例接上篇的簡單工廠模式。在原本示例的基礎上進行改進。將采用簡單工廠設計模式的示例改為采用工廠設計模式的示例。
class PenHolder
{
public:virtual void introduce() = 0;
};class PlasticPenHolder :public PenHolder
{
public:void introduce()override {cout << "I am PlasticPenHolder!" << endl;}
};class IronPenHolder :public PenHolder
{
public:void introduce()override {cout << "I am IronPenHolder!" << endl;}
};class BaseFactory
{
public:virtual PenHolder * createPenHolder() = 0;
};class PlasticFactory :public BaseFactory
{
public:PenHolder* createPenHolder()override {return new PlasticPenHolder;}
};class IronFctory :public BaseFactory
{
public:PenHolder* createPenHolder() override{return new IronPenHolder;}
};
示例使用
int main()
{cout << "工廠模式輸出:" << endl;BaseFactory *baseFactory1 = new PlasticFactory;PenHolder* penHolder1 = baseFactory1->createPenHolder();penHolder1->introduce();delete penHolder1;delete baseFactory1;BaseFactory *baseFactory2 = new IronFctory;PenHolder* penHolder2 = baseFactory2->createPenHolder();penHolder2->introduce();delete penHolder2;delete baseFactory2;return 0;
}
運行結果
工廠模式與簡單工廠模式區別
相同點:
簡單工廠模式和抽象工廠模式都是創建型設計模式。
不同點:
1.簡單工廠模式只有一個工廠類,通過該工廠類生產不同的產品,代碼結構簡單易懂。工廠模式先是抽象出一個抽象工廠類,在抽象工廠類中提煉出一個純虛的工廠函數,派生出不同的子工廠類,重寫抽象類中的工廠函數,生產不同的產品對象,一種產品對應一個子工廠類,相對于簡單工廠代碼復雜性增加。
2.簡單工廠模式當產品的種類增加時,需要修改工廠函數,破環了開放封閉原則。工廠模式當產品種類增加,只需增加新的子工廠類來生產新的產品,遵守了程序設計的開放封閉原則,具有很好的擴展性和易維護性。但也有一個弊端:當產品種類很多的時候,從抽象工廠類派生的子工廠類就會很多,造成了程序的繼承過大。
3.建檔工廠模式適用于需求相對簡單的產品創建。工廠模式適用于復雜產品的創建需求。