C++設計模式淺識工廠方法模式

黄舟
發布: 2017-01-18 14:59:58
原創
1494 人瀏覽過

工廠方法模式(Factory Method):定義一個用於建立物件的接口,讓子類別去實例化哪一個類,工廠方法使一個類別的實例化延遲到其子類別。

與簡單工廠的區別:簡單工廠需要修改原有類,違反了開閉原則。而工廠方法就避免類這個問題。保持了封裝物件的創建過程的優點,只需增加工廠類別就可以,解決了簡單工廠分支判斷的問題。

工廠方法模式包含四個角色:

Product:抽象產品

ConcreteProduct: 特定產品

Factory: 抽象工廠

Concrete

在此以學雷鋒為例,運用工廠方法模式,將雷鋒的方法視為抽象產品,對應抽象工廠; 學雷鋒的人視為具體產品, 對應具體工廠。如要新增學雷鋒的人員類別只需新增對應的類,而不需要修改原有類。

測試案例:

[code]int main(){
    //工厂方法
    IFactory *factory = new UnderGraduateFactory;  //new一个大学生工厂

    //创建学雷锋的学生
    LeiFeng *student = factory->createLeiFeng();

    //学生干了哪些雷锋方法
    student->BuyRice();  //买米
    student->Sweep(); //扫地
    student->Wash();  //清洗   

    return 0;
}
登入後複製
C++設計模式淺識工廠方法模式雷鋒類(抽象產品):

[code]class LeiFeng{
public:
    virtual void BuyRice(){
        std::cout << "Buy rice.\n";
    }
    virtual void Sweep(){
        std::cout << "Sweep.\n";
    }
    virtual void Wash(){
        std::cout << "Wash.\n";
    }
};
登入後複製

學雷鋒的人(具體產品):

[code]class UnderGraduate: public LeiFeng{
};
//学雷锋的志愿者(具体产品)
class Volunteer: public LeiFeng{
};
登入後複製

雷鋒工廠類(抽象工廠):具體工廠)

[code]class IFactory{
public:
    //创建学雷锋对象
    virtual LeiFeng* createLeiFeng(){
        return NULL;
    } 
};
登入後複製

雷鋒工廠類(抽象工廠):具體工廠) :
[code]class UnderGraduateFactory: public IFactory{
    LeiFeng* createLeiFeng(){
        return new UnderGraduate;
    }
};
class VolunteerFactory: public IFactory{
    LeiFeng* createLeiFeng(){
        return new Volunteer;
    }
};
登入後複製

以上就是C++設計模式淺識工廠方法模式的內容,更多相關內容請關注PHP中文網(www.php.cn)!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板