C++設計模式淺識Factory 方法模式

來源:互聯網
上載者:User
Factory 方法模式(Factory Method):定義一個用於建立對象的介面,讓子類去執行個體化哪一個類,Factory 方法使一個類的執行個體化延遲到其子類。

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

Factory 方法模式包含四個角色:

Product:抽象產品

ConcreteProduct: 具體產品

Factory: 抽象工廠

ConcreteFactory: 具體工廠

UML類圖



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

測試案例:

[code]int main(){    //Factory 方法    IFactory *factory = new UnderGraduateFactory;  //new一個大學生工廠    //建立學雷鋒的學生    LeiFeng *student = factory->createLeiFeng();    //學生幹了哪些雷鋒方法    student->BuyRice();  //買米    student->Sweep(); //掃地    student->Wash();  //清洗       return 0;}

雷鋒類(抽象產品):

[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++設計模式淺識Factory 方法模式的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.