C++設計模式學習筆記03_工廠方法1
阿新 • • 發佈:2018-12-13
0、工廠方法
1、繼續前面的總結,前面說到,當工廠需要生產新的產品時,簡單工廠模式需要我們對程式碼進行修改,而且不是程式碼的擴充套件,而是程式碼比較底層的修改了,因此會帶來很多後期測試等等的問題,工廠方法模式應運而生
2、工廠方法簡單來說就是利用了C++的抽象類(定義了純虛擬函式的類),將產品繼承在該抽象類下,定義一個抽象類(產品),產品都繼承該抽象類,工廠每次根據需要,產生對應的產品
3、工廠也定義一個抽象類,生產不同的產品,則建起不同的工廠
4、在工廠方法的模式下,若是希望引入一種新的產品,只需要定義一個新的類,將該類繼承在定義好的產品抽象類下,在建起(引入)新的工廠用來生產新的產品
5、不同產品由不同的工廠生產,在程式看來似乎是有些繁瑣,不過程式碼從邏輯上看起來則很清晰
#include <iostream> using namespace std; class Product { public: virtual void ShowYouself() = 0; private: }; class ProtuctA : public Product { public: void ShowYouself() { cout << "建立了A" << endl; } private: }; class ProtuctB : public Product { public: void ShowYouself() { cout << "建立了B" << endl; } private: }; //******************************以下是工廠***************************** class Fectory { public: virtual Product *CreateProtect() = 0; }; class FectoryA : public Fectory { public: Product *CreateProtect() { cout << "來到工廠A" << endl; return new ProtuctA; } }; class FectoryB : public Fectory { public: Product *CreateProtect() { cout << "來到工廠B" << endl; return new ProtuctB; } }; //******************************************************** int main(void) { Fectory *fectoryA = new FectoryA(); Fectory *fectoryB = new FectoryB(); Product *protectA = fectoryA->CreateProtect(); Product *protectB = fectoryB->CreateProtect(); protectA->ShowYouself(); protectB->ShowYouself(); if (protectA != NULL) { cout << "protectA被回收" << endl; delete protectA; protectA = NULL; } if (protectB != NULL) { cout << "protectB被回收" << endl; delete protectB; protectB = NULL; } if (fectoryA != NULL) { cout << "fectoryA被回收" << endl; delete fectoryA; fectoryA = NULL; } if (fectoryB != NULL) { cout << "fectoryB被回收" << endl; delete fectoryB; fectoryB = NULL; } system("pause"); return 0; }