-
簡單工廠模式:一種創(chuàng)建型設(shè)計(jì)模式
應(yīng)用場景:
通過一個(gè)對(duì)象(工廠),創(chuàng)建很多其他對(duì)象(產(chǎn)品)英古。實(shí)現(xiàn)方式:
所有產(chǎn)品類都繼承自同一抽象類帅戒,工廠生產(chǎn)產(chǎn)品時(shí),需要告知要制作的產(chǎn)品類型昧港,通過對(duì)類型的判斷擎椰,創(chuàng)建不同的產(chǎn)品。優(yōu)點(diǎn)
實(shí)現(xiàn)(產(chǎn)品)對(duì)象的創(chuàng)建與使用分離创肥。缺點(diǎn)
增加產(chǎn)品類型時(shí)达舒,需要修改工廠類的代碼。
以下是簡單工廠模式的簡易代碼實(shí)現(xiàn)
// SimpleFactory.hpp
#include <iostream>
using namespace std;
// 枚舉定義產(chǎn)品類型
typedef enum ProductType {
DESK,
CHAIR,
} PROTYPE;
// 產(chǎn)品抽象類
class Product {
public:
virtual void Show() = 0; // 用于驗(yàn)證產(chǎn)品信息
};
class WoodDesk: public Product {
public:
void Show() {
cout << "WoodDesk" << endl;
}
};
class WoodChair : public Product {
public:
void Show() {
cout << "WoodChair" << endl;
}
};
// 工廠類
class Factory {
public:
Product* CreateProduct(PROTYPE type) {
switch (type) {
case Desk:
return new WoodDesk();
case Chair:
return new WoodChair();
default:
break;
}
return NULL;
}
};
主函數(shù)中的使用
// main.c
#include "SimpleFactory.hpp"
int main()
{
// 創(chuàng)建工廠
Factory* MyFactory = new Factory();
// 傳入產(chǎn)品類型創(chuàng)建產(chǎn)品
Product* DeskWood = MyFactory->CreateProduct(Desk);
DeskWood->Show();
Product* ChairWood = MyFactory->CreateProduct(Chair);
ChairWood->Show();
if (NULL != MyFactory) {
delete MyFactory;
MyFactory = NULL;
}
return 0;
}
控制臺(tái)輸出結(jié)果
WoodDesk
WoodChair