工廠方法模式(factory method) :
定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到他的子類。
簡單工廠模式和工廠方法模式的區別:
1.簡單工廠模式
簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態實例化相關的類,對於客戶端來說,去除了與具體產品的依賴。
2.工廠方法模式
工廠方法模式實現時,客戶需要決定實例化哪一個工廠來決定產品類,判斷選擇的問題還是存在的,也就是說:工廠方法把簡單工廠的內部邏輯判斷移到了客戶端代碼來實現。你想要加功能,本來是修改工廠類的,而現在是修改客戶端。
工廠方法模式的一般形式:
一個具體的工廠方法模式的實例:
- #include <iostream>
- using namespace std;
- //志願者
- class volunteer
- {
- public:
- void regular()
- {
- cout << "維持秩序" << endl;
- }
- void guid()
- {
- cout << "嚮導" << endl;
- }
- void help()
- {
- cout << "助人爲樂" << endl;
- }
- };
- //大學生志願者
- class undergraduate : public volunteer
- {
- };
- //社會志願者
- class society : public volunteer
- {
- };
- //抽象工廠(用來生產志願者,雖然聽起來很彆扭,呵呵)
- class factory
- {
- public:
- virtual volunteer * CreateVolunteer() = 0;
- };
- //具體工廠(用來生產大學生志願者)
- class undergraduatefactory : public factory
- {
- public:
- volunteer * CreateVolunteer()
- {
- cout << "創建大學生志願者:" << endl;
- return new undergraduate();
- }
- };
- //具體工廠(用來生產社會志願者)
- class societyfactory : public factory
- {
- public:
- volunteer * CreateVolunteer()
- {
- cout << "創建社會志願者:" << endl;
- return new society();
- }
- };
- int main()
- {
- factory * _afactory = new undergraduatefactory();
- volunteer * _avolunteer = _afactory->CreateVolunteer();
- _avolunteer->guid();
- factory * _bfactory = new societyfactory();
- volunteer * _bvolunteer = _bfactory->CreateVolunteer();
- _bvolunteer->regular();
- return 0;
- }