工廠方法模式(Factory Method)


工廠方法模式(Factory Method

 

工廠方法模式(Factory Method[Virtual Constructor]

意圖:定義一個用於創建對象的接口,讓子類決定實例化哪一個類,使一個類的實力化延遲到子類。

應用:多文檔應用管理不同類型的文檔。

模式結構

心得

面對同一繼承體系(Product派生)的類,簡單工廠使用分支判斷創建不同的子類對象(ConcreteProduct)。為了消除分支帶來的擴展性問題,工廠方法提取工廠類的抽象接口(Creator),將對具體產品的實例化移動到子類(ConcreteCreator)中實現。而用戶需要具體的產品對象時,只需要找到生產該類產品的工廠就可以了。因為抽象接口提供了所有工廠的統一操作接口——工廠方法。

舉例

比如生產汽車的廠商(Creator),生產不同牌子的汽車(Product),每個具體的廠商負責一個牌子的汽車。當需要一個牌子的汽車時,我們先找到生產該類汽車的生產商,讓他幫我們生產出汽車就行了,而且這個汽車就是我們需要的牌子。實現為C++代碼如下:

// 產品類
class Car
{
public:
     virtual  void beep()= 0;
     virtual ~Car(){}
};
class BenziCar: public Car
{
public:
     virtual  void beep()
    {
        cout<< " 奔馳汽車 "<<endl;
    }
};
class BMWCar: public Car
{
public:
     virtual  void beep()
    {
        cout<< " 寶馬汽車 "<<endl;
    }
};
// 工廠接口
class Factory
{
public:
     virtual Car*createCar()= 0;
     virtual ~Factory(){}
};
class BenziFactory: public Factory
{
public:
     virtual Car*createCar()
    {
         return  new BenziCar();
    }
};
class BMWFactory: public Factory
{
public:
     virtual Car*createCar()
    {
         return  new BMWCar();
    }
};

 

如上,我們獲得汽車對象的代碼應該是這樣:

Factory*factory= new BenziFactory();
Car*car=factory->createCar();
car->beep();
delete car;
delete factory;

當我們需要另外一種汽車時候,只需要修改一下生產汽車的工廠對象就好了。

參考文章http://www.cnblogs.com/cwj-0122/articles/1267954.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM