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电视机,则抽象电视机与具体品牌的电视机之间 ...
随机推荐
- ORB:新一代 Linux 应用
Orbital Apps 给我们带来了一种新的软件包类型 ORB,它具有便携软件.交互式安装向导支持,以及离线使用的能力. 便携软件很方便.主要是因为它们能够无需任何管理员权限直接运行,也能够带着所有 ...
- Caching Best Practices--reference
reference:http://java.dzone.com/articles/caching-best-practices There is an irresistible attraction ...
- IDEA社区版运行并发布web项目
IDEA社区版相对收费版少了很多功能,其中包括tomcat等web服务器的支持.网上大部分的IDEA web应用发布教程都是基于收费版的,社区版并没有这么直接的图形化工具可以运行或发布web应用.幸运 ...
- js字符串的各种格式的转换 ToString,Format
1.转换钱的格式,仅限int型,float型,double型 double d = 400; d.ToString("C"); //¥400.00 2.10进制数,仅限int型的数 ...
- C#三大支柱之多态
1.包含与委托---has-a 2.嵌套类型(枚举.类.接口.结构等) 由于只有嵌套类才可声明为私有,通过嵌套类则可以完全控制内部类型的访问级别. 嵌套类型是包含类的成员,所有可以访问包含类的私有成员 ...
- (转)内网网站发布到外网-nat123动态公网IP动态域名解析
环境描述: 路由器分配的是动态公网IP,且有路由器登录管理权限,网站服务器部署在路由器内部网络.如何将内网网站发布到外网大众访问? 解决方案: 内网使用nat123动态域名解析,将域名实时固定解析到路 ...
- hust 1017 DLX
#include<set> #include<cmath> #include<queue> #include<cstdio> #include<v ...
- Convolution and Deconvolution
1.Introduction 2.Convolution 3.Deconvolution 4.Summary
- PHP与javascript实现变量交互
<?php /** * 本例是PHP和javascript交互的例子,php中的值赋给js变量中,前提是这个php变量必须有值才行,就算是假分支中. * 比如php中的$flags在本例中为tr ...
- 【转】c语言入门教程 / c语言入门经典书籍
用C语言开始编写代码 初级:C语言入门必备 (以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言 ...