Abstract_Factory
#include <iostream> using namespace std; #define DESTORY_POINTER(ptr) if (ptr) { delete ptr; ptr = NULL; } class ProductFamilyA
{
public:
virtual ~ProductFamilyA() {}
virtual void Action()=; protected:
ProductFamilyA() {}
}; class ProductFamilyB
{
public:
virtual ~ProductFamilyB() {}
virtual void Action()=; protected:
ProductFamilyB() {}
}; class Factory
{
public:
virtual ~Factory() {}
virtual ProductFamilyA* CreateProductA()=;
virtual ProductFamilyB* CreateProductB()=; protected:
Factory() {}
}; class ProductA1 : public ProductFamilyA
{
public:
ProductA1() {}
void Action() { cout<<"ProductFamilyA->ProductA1::Action"<<endl; }
}; class ProductA2 : public ProductFamilyA
{
public:
ProductA2() {}
void Action() { cout<<"ProductFamilyA->ProductA2::Action"<<endl; }
}; class ProductB1 : public ProductFamilyB
{
public:
ProductB1() {}
void Action() { cout<<"ProductFamilyB->ProductB1::Action"<<endl; }
}; class ProductB2 : public ProductFamilyB
{
public:
ProductB2() {}
void Action() { cout<<"ProductFamilyB->ProductB2::Action"<<endl; }
}; class Factory1 : public Factory
{
public:
ProductFamilyA* CreateProductA() { return new ProductA1; }
ProductFamilyB* CreateProductB() { return new ProductB1; }
}; class Factory2 : public Factory
{
public:
ProductFamilyA* CreateProductA() { return new ProductA2; }
ProductFamilyB* CreateProductB() { return new ProductB2; }
}; int main(int argc, char *argv[])
{
Factory* pFactory = NULL;
ProductFamilyA* pProductFamilyA = NULL;
ProductFamilyB* pProductFamilyB = NULL; pFactory = new Factory1; pProductFamilyA = pFactory->CreateProductA();
pProductFamilyB = pFactory->CreateProductB(); pProductFamilyA->Action();
pProductFamilyB->Action(); DESTORY_POINTER(pFactory);
DESTORY_POINTER(pProductFamilyA);
DESTORY_POINTER(pProductFamilyB); pFactory = new Factory2;
pProductFamilyA = pFactory->CreateProductA();
pProductFamilyB = pFactory->CreateProductB(); pProductFamilyA->Action();
pProductFamilyB->Action(); DESTORY_POINTER(pFactory);
DESTORY_POINTER(pProductFamilyA);
DESTORY_POINTER(pProductFamilyB); return ;
}
Abstract_Factory的更多相关文章
- 【编程思想】【设计模式】【创建模式creational】抽象工厂模式abstract_factory
Python版 https://github.com/faif/python-patterns/blob/master/creational/abstract_factory.py #!/usr/bi ...
- Java设计模式(三) 抽象工厂模式
原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...
- Functions
Small The first rule of functions is that they should be small.The second rule of functions is that ...
- Abstract Factory 抽象工厂模式
提供一个创建一些列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂顾名思义就是对工厂的抽象,它提供了一组创建抽象产品对象的操作接口,我们实际使用的是抽象工厂的派生类,派生类中提供了操作的具 ...
- 【创建型】Abstract Factory模式 & Factory Method模式
本文主要介绍简单工厂模式与抽象工厂模式.以下如有叙述不当之处,欢迎批评指正,欢迎交流探讨. 一:简单工厂模式 在23种设计模式中,简单工厂模式其实是不在列的,但理解该模式对于抽象工厂模式的思想理解是有 ...
- Java设计模式之简单工厂、工厂方法和抽象工厂
在前面的学习中(参见前面的博客),我们学到了很多OO原则: 封装变化 多用组合,少用继承 针对接口/超类编程,不针对实现编程 松耦合 开闭原则 让我们从一个简单的类开始,看看如何将之改造成符合OO原则 ...
- 设计模式——抽象工厂模式(C++实现)
#include <iostream> #include <string> using namespace std; class STAbstractProductA { pu ...
- 线程异步操作,更新其中一个报错不影响另一个的运行(Task )
//子系统同步更新 BD001_BLL bll = new BD001_BLL(); List<BD001_Model> lis ...
- 《大话设计模式》c++实现 抽象工厂模式
为了更清晰地理解工厂方法模式,需要先引入两个概念: 产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机.海信电视机.TCL电视机,则抽象电视机与具体品牌的电视机之间 ...
随机推荐
- Prepared statements(mysqli & pdo)
参考: http://php.net/manual/en/mysqli.quickstart.prepared-statements.php http://www.ultramegatech.com/ ...
- 用vim处理字符的大小写转换
转载: http://blog.csdn.net/ruixj/article/details/3765385 http://www.linuxsong.org/2010/09/vim-convert- ...
- solr返回的字段带有中括号问题
在solr返回的结果集的content字段返回格式为: "content": ["测试content" ], 经过对比title 和content字段,发现co ...
- IOS 读取本地的Json/plist 文件
一.一般本地可以存储轻量级数据存储 plist 这个主要是操作字典 方法如下: NSString * sampleFile= [[[NSBundle mainBundle] bundlePath] ...
- centos下查看rpm包安装位置
1.如何安装rpm软件包 rpm -ivh your-package.rpm其中your-package.rpm是你要安装的rpm包的文件名,一般置于当前目录下. 2.如何卸载rpm软件包使用命令 r ...
- 《算法导论》习题解答 Chapter 22.1-3(转置图)
一.邻接表实现 思路:一边遍历,一边倒置边,并添加到新的图中 邻接表实现伪代码: for each u 属于 Vertex for v 属于 Adj[u] Adj1[v].insert(u); 复杂度 ...
- 【三板斧】Java定位CPU使用高问题
[三板斧]Java定位CPU使用高问题 1.TOP命令,查询消耗CPU高的进程号 PID,并记录下来,按下键盘"H"键,记录高消耗线程号,并将改线程号转换为十六进制 2.使用 js ...
- 重构18-Replace exception with conditional(条件替代异常)
重构没有什么出处,是我平时经常使用而总结出来的.欢迎您发表任何改进意见或建议.我相信一定还有其他比较好的重构可以解决类似的问题. 我曾无数次面对的一个代码坏味道就是,使用异常来控制程序流程.您可能会 ...
- hdu 4705 排列组合
思路:枚举能是A,B,C在一条简单路径上的中点. 计算多少个几何能满足.在用总数减去 #pragma comment(linker, "/STACK:16777216") #inc ...
- 正则表达式删除指定的HTML 标签
1.抓取某网页的数据后(比如描述),如果照原样显示的话,可能会因为它里面包含没有闭合的HTML标签而打乱了格式,也可能它里面用了比较让人 "费解" 的HTML标签,把预订的格式搅乱 ...