设计模式:工厂方法模式(C++)【简单工厂进行升级】
生活随笔
收集整理的這篇文章主要介紹了
设计模式:工厂方法模式(C++)【简单工厂进行升级】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
工廠方法模式介紹
我們接上一集設計模式:簡單工廠模式(C++),在簡單工廠模式中,知道它的優點可以將我們從自己生產產品中解放出來,它的缺點:
1、 必須提供一個產品類型 給工廠 然后工廠給我們生產產品這就意味著客戶必須知道工廠能夠提供哪些產品 ,才能向工廠要相應的產品!
2、每次添加新的產品類型,我們都要去更改簡單工廠的代碼,這樣代碼就很耦合了,不利于維護。
那么有沒有一種更好的方法,既能保存原來的優點,又可以將生產產品的工廠解耦呢?還可以讓用戶不用記住工廠生產的產品呢?
ok,那么我們工廠方法模式 就閃亮登場了。工廠方法模式就是來解決簡單工廠模式的缺點而來的。我們先不談工廠方法模式,我們自己考慮代碼解耦合 最好的辦法是不是進行抽象化呢?既然簡單工廠模式的生成產品的方法 耦合了,那我們對它進行抽象化不就得了。這就是一個思考的方向。工廠方法模式 就是在簡單工廠模式的基礎上將生成產品的工廠方法進行抽象化!抽象化之后,不同的工廠生產不同的產品,各司其職。用戶需要什么樣的產品 就去找對應的 的工廠就行了。
工廠方法模式模型圖
工廠方法模式代碼
#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 AbstractCarFactory { public:virtual Car* CreateCar() = 0;//純虛函數 }; //生產寶馬汽車的 工廠 class BMWCarFactory:public AbstractCarFactory { public :Car* CreateCar(){Car* bmw = new BMW("寶馬");return bmw;} }; //生產奔馳汽車的 工廠 class BenzCarFactory :public AbstractCarFactory { public:Car* CreateCar(){Car* benz = new Benz("奔馳");return benz;} }; //生成哈弗汽車的 工廠 class HavalCarFactory :public AbstractCarFactory { public:virtual Car* CreateCar(){Car* haval = new Haval("哈弗");return haval;} }; int main(int argc, char *argv[]) {AbstractCarFactory *bmwFactory = new BMWCarFactory();//寶馬工廠 專門生產寶馬AbstractCarFactory *benzFactory = new BenzCarFactory();//奔馳工廠 專門生產奔馳AbstractCarFactory *havalFactory = new HavalCarFactory();//哈弗工廠 專門生產哈弗//無須記住產品名稱 只需對應的工廠 就可以直接生成出對應的 汽車了Car* bmw = bmwFactory->CreateCar();Car* benz = benzFactory->CreateCar();Car* haval = havalFactory->CreateCar();//啟動 汽車bmw->run();benz->run();haval->run();return EXIT_SUCCESS; }運行結果
工廠方法模式的優缺點
優點
缺點
總結
以上是生活随笔為你收集整理的设计模式:工厂方法模式(C++)【简单工厂进行升级】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL数据的备份与还原实现步骤
- 下一篇: Windows编程—BroadcastS