设计模式之工厂模式(2)
来源:互联网 发布:windows音量快捷键 编辑:程序博客网 时间:2024/05/03 10:53
#ifndef ABSTRACT_FACTORY_H_#define ABSTRACT_FACTORY_H_//创建抽象产品class AbstractProductOne{public: virtual voidCreateOne()=0;};class AbstractProductTwo{public: virtual voidCreateTwo()=0;};//生产实际的产品class ProductOneA:public AbstractProductOne{public: voidCreateOne();};class ProductOneB:public AbstractProductOne{public: voidCreateOne();};class ProductTwoA:public AbstractProductTwo{public: voidCreateTwo();};class ProductTwoB:public AbstractProductTwo{public: voidCreateTwo();}; //创建抽象工厂class AbstractFactory{public: virtualAbstractProductOne *CreateProductOne() =0; virtualAbstractProductTwo *CreateProductTwo() =0;}; //创建实际的工厂class FactoryA:public AbstractFactory{public: AbstractProductOne *CreateProductOne(); AbstractProductTwo *CreateProductTwo(); };class FactoryB:public AbstractFactory{public: AbstractProductOne *CreateProductOne(); AbstractProductTwo *CreateProductTwo();};#endif//实现文件#include "AbstractFactory.h"#include <iostream>using namespace std;void main(){ AbstractFactory*Factory1 =new FactoryA; Factory1->CreateProductOne()->CreateOne(); Factory1->CreateProductTwo()->CreateTwo(); AbstractFactory*Factory2 =new FactoryB; Factory2->CreateProductOne()->CreateOne(); Factory2->CreateProductTwo()->CreateTwo();}
从工厂方法模式到抽象工厂模式是这个模式的一个应用扩展,与之前工厂方法想比较而言,抽象工厂模式多了一个产品族的概念。工厂方法模式中,只有一个产品等级结构,而在抽象工厂模式中,就有多个产品等级结构。
产品族和等级结果是两种不同的对产品的划分方式,比如说一个生产鞋子的工厂,不同的鞋码是一个产品等级,但是男士鞋和女士鞋以及儿童鞋这属于不同的产品族划分。通过产品族和生产等级结构进行相互配合,从而生产出了你要求的某种款式和鞋码的鞋子。
下面是抽象工厂模式的通用类图。
与工厂方法模式相比,工厂方法模式中,每增加一类产品就需要增加一个实现的工厂。而抽象工厂的最大优点就是避免了频繁的增加实现工厂的缺陷。抽象工厂如果要增加一个新产品,只需要在基类中添加一个接口,即可以完成对新产品的生产。同时,生产出来的新产品可以沿用之前的产品族和生产等级结构。
因此,抽象工厂就是针对这种产品中有多种分类方法,而工厂方法又不能够很好进行解决而诞生的。工厂方法针对于某单一种类的生产等级结构是很方便的,但是对于这种存在多样化的生产方式,就会存在问题。
下面是一个实现的例子:
最后的实现效果如下:
抽象工厂对于繁多的产品种类情况下就能够很好的实现,其实在很多实际的生产中都是采用这种抽象工厂模式的。
- 设计模式之工厂模式(2)
- (2)设计模式之工厂模式
- 设计模式解读之 简单工厂模式&工厂方法模式&抽象工厂模式(2)
- 设计模式学习之工厂模式(简单工厂模式)
- 设计模式之(2)简单工厂模式
- C#设计模式之工厂模式(2)
- 设计模式(2)之工厂方法模式
- 设计模式之2--工厂方法模式
- 设计模式之--工厂模式(Factory)
- 设计模式之 工厂模式(一)
- 设计模式之工厂模式(一)
- 设计模式之--工厂模式(Factory)
- 设计模式之工厂模式(1)
- 设计模式之工厂模式(factory)
- 设计模式之工厂模式(FactoryMethordPattern)
- 设计模式之 工厂模式(demo)
- 设计模式之工厂模式(Factory)
- 设计模式之工厂模式(java)
- 中断
- NLP常用工具
- MFC 类向导添加变量出错 Unhandled exception in snmp.exe:0xC0000005:Access Violation
- (转)Android提高第二十一篇之MediaPlayer播放网络视频
- TinyXML 递归遍历实例
- 设计模式之工厂模式(2)
- MyEclipse 正则表达式替换
- 向Xcode加入字体
- ASIHTTPRequest和ASIFormDataRequest 区别,GET和POST
- python set 介绍
- Web编程前端之4:css+div多样式可定制完美分页全攻略
- 设计模式之单例模式
- MAC将Vim配置为类Sourceinsight代码阅读工具
- 查看openstack所有服务是否已经起来