設計模式-工廠模式

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. 虛構造函數

構造函數不能爲虛函數,因爲構造一個類型的對象時,必須知道有關對象類型的所有信息。
“虛構造函數”在這裏指的是接近虛構造函數的行爲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章