設計模式-工廠模式
阿新 • • 發佈:2018-10-02
ret 派生 end ring circle struct att eat n) Design Pattern - Factory mode
《C++編程思想》筆記
1. 通用工廠,或者靜態工廠
在子類中把父類聲明為友元類
在下面示例的工廠模式中,子類的構造函數的訪問權限為private。而工廠方法
```C++
static Shape* factory(const string& type);
是父類的static方法。**工廠模式下子類對象只能在這個方法中進行創建**,所以需要在子類中把父類聲明為友元類,或者把Shape::factory()聲明為友元函數。 這樣,基類就必須了解每個派生類丁細節。**這是面向對象設計應該試圖避免的情況。** ```C++ //: C10:ShapeFactory1.cpp class Shape { public: virtual void draw() = 0; virtual void erase() = 0; virtual ~Shape() {} class BadShapeCreation : public logic_error { public: BadShapeCreation(string type) : logic_error("Cannot create type " + type) {} }; static Shape* factory(const string& type) throw(BadShapeCreation); }; class Circle : public Shape { Circle() {} // Private constructor friend class Shape; // *把父類設置為友元類* public: void draw() { cout << "Circle::draw" << endl; } void erase() { cout << "Circle::erase" << endl; } ~Circle() { cout << "Circle::~Circle" << endl; } }; Shape* Shape::factory(const string& type) throw(Shape::BadShapeCreation) { if(type == "Circle") return new Circle; if(type == "Square") return new Square; throw BadShapeCreation(type); }
2. 多態工廠
略
3. 抽象工廠
略
4. 虛構造函數
構造函數不能為虛函數,因為構造一個類型的對象時,必須知道有關對象類型的所有信息。
“虛構造函數”在這裏指的是接近虛構造函數的行為。
設計模式-工廠模式