AbstractFactory模式就是用来解决这类问题的:要创建一组相关或者相互依赖的对象。

  AbstractFactory模式关键就是将这一组对象的创建封装到一个用于创建对象的类(ConcreteFactory)中,

维护这样一个创建类总比维护n多相关对象的创建过程要简单的多。

Product.h

 #ifndef _PRODUCT_H_
#define _PRODUCT_H_
class AbstractProductA {
public:
virtual ~AbstractProductA();
protected:
AbstractProductA();
private:
};
class AbstractProductB {
public:
virtual ~AbstractProductB();
protected:
AbstractProductB();
private:
};
class ProductA1:public AbstractProductA {
public:
ProductA1();
~ProductA1();
protected:
private:
};
class ProductA2:public AbstractProductA {
public:
ProductA2();
~ProductA2();
protected:
private:
};
class ProductB1:public AbstractProductB {
public:
ProductB1();
~ProductB1();
protected:
private:
};
class ProductB2:public AbstractProductB {
public:
ProductB2();
~ProductB2();
protected:
private:
};
#endif //~_PRODUCT_H_

Product.cpp

 #include "Product.h"
#include <iostream>
using namespace std;
AbstractProductA::AbstractProductA() {
}
AbstractProductA::~AbstractProductA() {
}
AbstractProductB::AbstractProductB() {
}
AbstractProductB::~AbstractProductB() {
}
ProductA1::ProductA1() {
cout<<"ProductA1..."<<endl; }
ProductA1::~ProductA1() {
}
ProductA2::ProductA2() {
cout<<"ProductA2..."<<endl; }
ProductA2::~ProductA2() {
}
ProductB1::ProductB1(){
cout<<"ProductB1..."<<endl; }
ProductB1::~ProductB1() {
}
ProductB2::ProductB2() {
cout<<"ProductB2..."<<endl; }
ProductB2::~ProductB2() {
}

AbstractFactory.h

 #ifndef _ABSTRACTFACTORY_H_
#define _ABSTRACTFACTORY_H_ class AbstractProductA;
class AbstractProductB; class AbstractFactory {
public:
virtual ~AbstractFactory();
virtual AbstractProductA* CreateProductA() = ;
virtual AbstractProductB* CreateProductB() = ;
protected:
AbstractFactory();
private:
};
class ConcreteFactory1:public AbstractFactory {
public:
ConcreteFactory1();
~ConcreteFactory1();
AbstractProductA* CreateProductA();
AbstractProductB* CreateProductB();
protected:
private:
};
class ConcreteFactory2:public AbstractFactory {
public:
ConcreteFactory2();
~ConcreteFactory2();
AbstractProductA* CreateProductA();
AbstractProductB* CreateProductB();
protected:
private:
};
#endif //~_ABSTRACTFACTORY_H_

AbstractFactory.cpp

 #include "AbstractFactory.h"
#include "Product.h"
#include <iostream>
using namespace std;
AbstractFactory::AbstractFactory() {
}
AbstractFactory::~AbstractFactory()
{
}
ConcreteFactory1::ConcreteFactory1() {
}
ConcreteFactory1::~ConcreteFactory1() {
}
AbstractProductA* ConcreteFactory1::CreateProductA() { return new ProductA1(); }
AbstractProductB* ConcreteFactory1::CreateProductB() { return new ProductB1(); }
ConcreteFactory2::ConcreteFactory2() {
}
ConcreteFactory2::~ConcreteFactory2() {
}
AbstractProductA* ConcreteFactory2::CreateProductA() { return new ProductA2(); }
AbstractProductB* ConcreteFactory2::CreateProductB() { return new ProductB2(); }

main.cpp

 #include "AbstractFactory.h"
#include <iostream>
using namespace std;
int main(int argc,char* argv[]) {
AbstractFactory* cf1 = new ConcreteFactory1();
cf1->CreateProductA();
cf1->CreateProductB();
AbstractFactory* cf2 = new ConcreteFactory2();
cf2->CreateProductA();
cf2->CreateProductB();
return ;
}

  AbstractFactory模式和Factory模式的区别是初学(使用)设计模式时候的一个容易引起困惑的地方。实际上,AbstractFactory模式是为创建一组(有多类)相关或依赖的对象提供创建接口,而Factory模式正如我在相应的文档中分析的是为一类对象提供创建接口或延迟对象的创建到子类中实现。并且可以看到,AbstractFactory模式通常都是使用Factory模式实现(ConcreteFactory1)。

最新文章

  1. 获取用户SID
  2. The MESI Protocol
  3. JavaScript 2016年的概况
  4. 关于FileStream读取大文件问题
  5. function foo(){}、(function(){})、(function(){}())等函数区别分析
  6. Session赋值(备注)
  7. ios 流媒体 资料
  8. iOS绘制手势解锁密码
  9. 深刻理解C#中资源释放
  10. SaaS系列介绍之十四: SaaS软件开发分析
  11. bzoj2432
  12. 看文档要看仔细,英语要加强啊... cocos2d-x 的 API 和 对应版本的 cocos2d-js 的 API 没有完全对应
  13. LCD驱动(FrameBuffer)实例开发讲解
  14. CSS公用
  15. redis新手入门,摸不着头脑可以看看&lt;三&gt;——lrange分页
  16. property与x.setter与x.deleter
  17. Python—字符串的操作
  18. Jmeter-----邮件观察仪
  19. 跟未名学Office - PPT操作:高效
  20. e776. 设置JList组件项的提示语

热门文章

  1. 使用 UIWebView 来播放视频
  2. uml图的五种关系 标签: uml 2016-12-18 21:47 221人阅读 评论(25) 收藏
  3. BZOJ1085 luogu2324骑士精神题解
  4. Java面向对象----String对象的声明和创建
  5. @atcoder - AGC038E@ Gachapon
  6. Javascript用正则表达式replace替换父串中所有符合条件的子串
  7. Python 基础 --初识Python
  8. 【小程序案例】支付宝小程序-MQTT模器,IoT设备通过WSS接入阿里云IoT物联网平台
  9. H3C路由器Telnet服务配置命令
  10. [转]Netty实现原理浅析