C++實現工廠模式

無鞋童鞋發表於2017-08-02

1 說在前面的話
  工廠模式可能和單例模式應該是設計模式中最簡單的兩種模式了,所以在前面介紹完單例模式後,我們再來重點學習一下工廠模式。
  工廠模式屬於建立型模式,可以分為三類:簡單工廠模式、工廠方法模式、抽象工廠模式。它們的區別主要在建立工廠的複雜程度以及產品的複雜程度上。
2 三種模式區別
 2.1 簡單工廠模式
  一個抽象產品類,可以派生出多個具體產品類;
  一個工廠類,工廠類可以建立多個具體產品類的例項。
 2.2 工廠方法模式
  一個抽象產品類,可以派生出多個具體產品類;
  一個抽象工廠類,可以派生出多個具體工廠類;
  每個具體工廠類只能建立一個具體產品類的例項。
 2.3 抽象工廠模式
  多個抽象產品類,每個抽象產品類可以派生出多個具體產品類;
  一個抽象工廠類,可以派生出多個具體工廠類;
  每個具體工廠類可以建立多個具體產品類的例項。
 區別:
  Ⅰ 簡單工廠和模式工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。
  Ⅱ 簡單工廠模式只有一個工程類,對應多個產品;而工廠方法模式的具體工廠類只能建立一個具體產品類的例項,但有多個工廠;而抽象工廠模式可以建立多個工廠,同時一個工程可以建立多個產品類。
3 簡單工廠模式
  簡單工廠就是一個工廠就管理建立多個產品,你想要什麼產品給這個工廠發對應訊息,它就給你生成對應的產品。我們看下面的程式,下面程式構建了一個商品抽象類,然後對應多個具體商品類,然後建立了一個工廠用來例項化需求的商品。

#include<iostream>
using namespace std;

enum SINGNAL { APPLE, ORANGE, BANANA };

/*一個抽象產品類*/
class Goods
{
public:
    virtual void show() = 0;
};

/*繼承自抽象產品類的第一個具體商品類*/
class Apple :public Goods
{
public:
    void show()
    {
        cout << "This is apple" << endl;
    }
};
/*繼承自抽象產品類的第二個具體商品類*/
class Orange :public Goods
{
public:
    void show()
    {
        cout << "This is orange" << endl;
    }
};
/*繼承自抽象產品類的第三個具體商品類*/
class Banana :public Goods
{
public:
    void show()
    {
        cout << "This is banana" << endl;
    }
};
/*工廠類,用來建立對應商品*/
class Factory
{
public:
    Goods* SwitchGoods(enum SINGNAL& choose)
    {
        if (choose == APPLE)
        {
            return new Apple();
        }
        else if (choose == ORANGE)
        {
            return new Orange();
        }
        else if (choose == BANANA)
        {
            return new Banana();
        }
    }
};


int main()
{
    // 建立哪種商品的指示
    enum SINGNAL singnal = APPLE;
    // 例項化一個工廠
    Factory factory;
    // 委託工廠生產某一件產品
    Goods* goods = factory.SwitchGoods(singnal);
    goods->show();  // 輸出結果是:This is apple
    return 0;
}

相關文章