抽象工厂的例子

抽象工厂没有讲明白,这里填加一个比较完整的例子.我觉得明白了抽象工厂目标是通过一个抽象工厂的子类来建立一系列同一性质的产品这点,就理解该模式了.

#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 << "女军战斗" << 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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值