抽象工廠沒有講明白,這里填加一個比較完整的例子.我覺得明白了抽象工廠目標(biāo)是通過一個抽象工廠的子類來建立一系列同一性質(zhì)的產(chǎn)品這點(diǎn),就理解該模式了.
#include <iostream> #include <string> using namespace std;
class General { public:
virtual void Assault() = 0; }; class GirlGeneral : public General { private: string m_strName; public: GirlGeneral(string strName):m_strName(strName){}
void Assault() { cout << " 女將軍 " << m_strName << "正在攻擊!"<< endl; } }; class ManGeneral : public General { private: string m_strName; public: ManGeneral(string strName):m_strName(strName){}
void Assault() { cout << " 將軍 " << m_strName << "正在攻擊!"<< endl; } };
class Army { public: virtual void war() { } }; class GirlArmy : public Army { public: void war() { cout << "女軍戰(zhàn)斗" << endl; } }; class ManArmy : public Army { public: void war() { cout << "男軍戰(zhàn)斗" << endl; } };
//抽象工廠的基類
class AbstractFactory { public: virtual General* CreateGeneral(){return NULL;} virtual Army* CreateArmy(){return NULL;} }; //創(chuàng)建所有和女性有關(guān)的對象 class GirlFactory : public AbstractFactory { public: GirlFactory(){}
General *CreateGeneral(string strName) { return new GirlGeneral(strName); } Army *CreateArmy() { return new GirlArmy(); } };
//創(chuàng)建所有和男性有關(guān)的對象 class ManFactory : public AbstractFactory { public: General *CreateGeneral(string strName) { return new ManGeneral(strName); } Army *CreateArmy() { return new ManArmy(); } };
int main(int argc, char* argv[]) { GirlFactory gF; ManFactory mF;
//抽象工廠強(qiáng)調(diào)的是建立一系列的產(chǎn)品 //通過gF,我們就可以創(chuàng)建所有和女性有關(guān)的對象 General* pGeneral = gF.CreateGeneral("女將軍"); pGeneral->Assault();
Army *pArmy = gF.CreateArmy(); pArmy->war();
//通過mF,我們就可以創(chuàng)建所有和女性有關(guān)的對象 pGeneral = mF.CreateGeneral("男將軍"); pGeneral->Assault();
pArmy = mF.CreateArmy(); pArmy->war();
return 0; }
|