抽象工厂的例子

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

#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

}

};

class ManGeneral : public General

{

private:

string m_strName;

public:

ManGeneral(string strName):m_strName(strName){}

void Assault()

{

cout

}

};

class Army

{

public:

virtual void war()

{

}

};

class GirlArmy : public Army

{

public:

void war()

{

cout

}

};

class ManArmy : public Army

{

public:

void war()

{

cout

}

};

//抽象工厂的基类

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;

}

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

#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

}

};

class ManGeneral : public General

{

private:

string m_strName;

public:

ManGeneral(string strName):m_strName(strName){}

void Assault()

{

cout

}

};

class Army

{

public:

virtual void war()

{

}

};

class GirlArmy : public Army

{

public:

void war()

{

cout

}

};

class ManArmy : public Army

{

public:

void war()

{

cout

}

};

//抽象工厂的基类

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;

}


相关内容

  • 简单工厂,工厂方法和抽象工厂的区别总结(转)
  • 最近这三个模式有点搞混了,而且网上也有类似情况.总结一下. 简单工厂:严格说并不是一个设计模式.简单工厂没有抽象类,只有一个具体工厂类如MyFactory,然后MyFactory里面有个工厂方法CreateProduct返回一个基类产品,具体返回什么具体实例通过传入参数然后用case判断. 用手机生 ...

  • 简单工厂模式和抽象工厂模式的通俗理解
  • 以造汽车为例来通俗的说一下:(写的不好或有错误的地方欢迎大家指正) 汽车制造商要造汽车卖给客户,那应该如可来做?看下面: 第一:汽车制造商要知道客户要什么样的汽车,即设计汽车: 第二:设计完后,一切ok后,就可以制造汽车了: 根据上面二步描述,我们用程序表达出来就是(假设现在要造一辆Buick): ...

  • 托福写作例子之名人的失败与成功
  • 智课网TOEFL备考资料 托福写作例子之名人的失败与成功 出国英语考试有哪些 雅思6.5是什么水平 雅思阅读评分标准 托福阅读评分标准 雅思和托福的区别 莱特兄弟:诺贝尔:曼德拉:丘吉尔:贝多芬:舒伯特:朗朗:Liz Murray:杰克韦尔奇:毕加索:罗斯福:奥普拉 Ludwig van Beeth ...

  • 需求分析与设计总结
  • OOD原理: 1. 开放封闭原理 (The Open-Closed Principle .OCP) 2. 里氏代换原理 (Liskov Substitution Principle, LSP) 3. 依赖倒转原理 (Dependence Inversion Principle, DIP) 4. 单一 ...

  • 读书与思考的方法-张五常(精心编排版)
  • 读书的方法 --张五常 首先声明,我要谈的是为知识而读书的方法,不是为考试而读书的方法.后者,香港的学生都是专家--猜题目.背课文之能,世间少有.但为知识而读书可以帮助考试,为考试而读书却未必可助知识的增长.知识是读书的目的(An End):考试只是一个方法(A Means).然而香港学生(或教育制 ...

  • 设计模式心得体会
  • 7月初的一个周末,准确的说应该是7月1号周六,在网上看到一本<大话设计模式>的书,而且看到很多很好的评论,于是乎,下载了电子书看看,一下子看了几章之后,对设计模式有了个了解,于是继续上网搜些其他资料,进一步了解设计模式...最终结论:设计模式是个好东西,具体怎么好,一两句话是无法概括的, ...

  • [机械基础]教学随谈
  • [摘要] <机械基础>是机械专业的一门必修课,实践性较强,但传统教学模式的教学效果并不理想.针对这一实际情况,笔者根据自己多年的教学经验,从六个方面详细阐述了如何上好<机械基础>课. [关键词] 学习兴趣 多媒体 实践能力 自学能力 <机械基础>是机械专业及相近专 ...

  • 面向对象三个基本特征
  • 封装 封装最好理解了.封装是面向对象的特征之一,是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 继承 面向对象编程 (OOP) 语言的一个主要功能就是"继承".继承是指这样一种能力: ...

  • 情绪与感受的区别
  • 题记: 我们常常说要表达感受,但是却经常忽略情绪和感受是非常不同的.情绪是短暂的因外物而产生的:而感受是由内在产生的稳定的体验,不能混淆.我们要提升我们的感受力,而不是提高我们的情绪激烈程度. 国内相关的文字非常少,即便有,也是神神叨叨.说不清楚(类ZDF之流的文字).还好,找到了以下这篇外文的资料 ...