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电视机,则抽象电视机与具体品牌的电视机之间 ...
随机推荐
- Linux scp 使用详解
一般情况,本地网络跟远程网络进行数据交抱,或者数据迁移,常用的有三种方法,一是ftp,二是wget /fetch 三是,rsync 大型数据迁移用rysync,其次用fetch/wget ,最次是ft ...
- __attribute__((unused))
在gcc手册中找到了有关的解释: unused:This attribute, attached to a function, means that the function is meant to ...
- layer.js,,,分享一个好用的弹出层
基本属性: <!DOCTYPE html> <html> <head> <head> <meta content="text/html; ...
- Linux 查看物理内存
free -k free -m free -b man free cat /proc/meminfo
- 【高德地图开发4】---增加覆盖物setMapTextZIndex
高德地图 Android SDK 允许用户将添加的线.面等覆盖物设置在地图底图文字的上方或下方. 具体实现是使 用 AMap 类的 setMapTextZIndex() 方法来设置地图底图文字的z轴指 ...
- PSI在windows server2008服务器上的安装方法
PSI(http://www.oschina.net/p/psi-crm)是一款开源进销存软件,功能较为齐全,使用比较方便.在windows server2008系统中安装时遇到了一些问题,总结解决方 ...
- 《UNIX环境高级编程》学习心得 四 文件I/O(一)
这里说的文件I/O是相对标准I/O来说的.主要介绍在UNIX系统中常用的五个文件I/O函数:open.read.write.lseek.以及close. 一.open和opennat #include ...
- Http error code
概要 当用户试图通过HTTP或文件传输协议(FTP)访问一台正在运行Internet信息服务(IIS)的服务器上的内容时,IIS返回一个表示该请求的状态的数字代码.该状态代码记录在IIS日志中,同时也 ...
- poj 1698 Alice's Chance 最大流
题目:给出n部电影的可以在周几拍摄.总天数.期限,问能不能把n部电影接下来. 分析: 对于每部电影连上源点,流量为总天数. 对于每一天建立一个点,连上汇点,流量为为1. 对于每部电影,如果可以在该天拍 ...
- Interesting Applications in Machine Learning and Computer Vision
1.Visually Indicated Sounds 网址:http://vis.csail.mit.edu/ 通过视频预测敲打的声音 2.AI Porn Video Editor 代码网址:htt ...