设计模式:简单工厂模式(C++)【看不懂算我输】
簡單工廠模式介紹
簡單工廠模式并不是Gof四人幫搞的23中設計模式中的一種,只不過大部分的設計模式書籍都會介紹它。所有我們還是來看看它,或許你覺得很簡單。但是我們可以瞧瞧它有什么優點和缺點。如何進行改進?進行一些發散性的思考。
簡單工廠模式由來
工廠是什么?大多人都應該知道吧,就是生產批量的產品。我們知道對象,編程語言中的對象,都是我們new 出來的,我們每調用一次構造器才會生成一個對象。就相當于產品,我們親自去生成產品然后去使用,自產自銷嘛。這樣是不是很累呀,由此就誕生了工廠,我們可以把我們需要的產品類型給我們的工廠,讓工廠去給我們生成這些產品。我們就成客戶啦,直接從工廠拿貨!這樣是不是方便很多呀。ok,我們的簡單工廠模式呢,就是客戶提供類型,工廠進行生成,然后將生成好的產品 返回給用戶。
簡單工廠模式代碼模型圖
簡單工廠模式代碼
下面我們來看簡單工廠模式的C++代碼,SampleFactory.cpp是不是很簡單,因為名字中就簡單啊。
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> using namespace std; //汽車基類 抽象類不可以實例化 class Car { public:Car(string name){this->name = name;}virtual void run() = 0;//純虛函數void setName(string name){this->name = name;}string getName(){return this->name;} private:string name; }; //寶馬汽車繼承汽車類 class BMW:public Car { public:BMW(string name):Car(name){}void run(){cout << this->getName() << "已經啟動。" <<"寶馬汽車歡迎您。" <<endl;} }; //奔馳汽車繼承汽車類 class Benz :public Car { public:Benz(string name):Car(name){}void run(){cout << this->getName() << "已經啟動。" << "奔馳汽車歡迎您。" << endl;} }; //哈弗汽車繼承汽車類 class Haval:public Car { public:Haval(string name):Car(name){}void run(){cout << this->getName() << "已經啟動。" << "哈弗汽車歡迎您。" << endl;} }; /* 簡單工廠模式 */ class CarFactory { private:CarFactory(){} public:static Car* CreateCar(char* name){if (name == NULL){cout << "請輸入正確的汽車品牌!" << endl;return NULL;}Car* car = NULL;if (strcmp(name,"BMW")==0){car = new BMW("BMW");}else if (strcmp(name, "Benz") == 0){car = new Benz("Benz");}else if (strcmp(name, "Haval") == 0){car = new Haval("Haval");}else{cout << "請輸入正確的汽車品牌!" << endl;return NULL;}return car;} }; int main(int argc, char *argv[]) {Car* bmw = CarFactory::CreateCar("BMW");Car* benz = CarFactory::CreateCar("Benz");Car* haval = CarFactory::CreateCar("Haval");bmw->run();benz->run();haval->run();return EXIT_SUCCESS; }運行結果
簡單工廠的優缺點
我們從代碼中可以看出,工廠生成汽車產品,我們必須提供汽車產品的型號呀,不然工廠怎么知道要生成汽車呀,所有用戶必須提供一個工廠能夠生產汽車的類型。這確實將我們從親自制造產品中解脫出來了,有木有,讓工廠幫我們生成產品,這是優點。但是你發現缺點了沒有,如果客戶需要其他品牌的汽車,我們的工廠 是不是又要進行擴充 增加生成線呢?增加更多的else if 來判斷用戶的需要的汽車類型啊,世界上汽車品牌那么多,我們的工廠 難度要成為世界工廠 什么汽車都要生產和制造?這就是問題,如何解決呢?請看下集 設計模式:工廠方法模式(C++)。
總結
以上是生活随笔為你收集整理的设计模式:简单工厂模式(C++)【看不懂算我输】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: visual studio运行时库MT、
- 下一篇: source 命令