抽象工厂的例子

来源:百度文库 编辑:神马文学网 时间:2024/07/03 15:19:41
抽象工厂没有讲明白,这里填加一个比较完整的例子.我觉得明白了抽象工厂目标是通过一个抽象工厂的子类来建立一系列同一性质的产品这点,就理解该模式了.
#include
#include
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 << "女军战斗" << endl;
}
};
class ManArmy : public Army
{
public:
void war()
{
cout << "男军战斗" << endl;
}
};
//抽象工厂的基类
class AbstractFactory
{
public:
virtual General* CreateGeneral(){return NULL;}
virtual Army* CreateArmy(){return NULL;}
};
//创建所有和女性有关的对象
class GirlFactory : public AbstractFactory
{
public:
GirlFactory(){}
General *CreateGeneral(string strName)
{
return new GirlGeneral(strName);
}
Army *CreateArmy()
{
return new GirlArmy();
}
};
//创建所有和男性有关的对象
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;
//抽象工厂强调的是建立一系列的产品
//通过gF,我们就可以创建所有和女性有关的对象
General* pGeneral = gF.CreateGeneral("女将军");
pGeneral->Assault();
Army *pArmy = gF.CreateArmy();
pArmy->war();
//通过mF,我们就可以创建所有和女性有关的对象
pGeneral = mF.CreateGeneral("男将军");
pGeneral->Assault();
pArmy = mF.CreateArmy();
pArmy->war();
return 0;
}