抽象工厂(AbstractFactory)
2015-08-28 14:51
253 查看
//#include "Product.h" class AbstractProductA; class AbstractProductB; class AbstractFactory { public: //AbstractFactory(); virtual ~AbstractFactory(); virtual AbstractProductA* CreateProductA()= 0; virtual AbstractProductB* CreateProductB()= 0; protected: private: }; class ConcreateFactory1:public AbstractFactory { public: ConcreateFactory1(); ~ConcreateFactory1(); AbstractProductA* CreateProductA(); AbstractProductB* CreateProductB(); protected: private: }; class ConcreateFactory2:public AbstractFactory { public: ConcreateFactory2(); ~ConcreateFactory2(); AbstractProductA* CreateProductA(); AbstractProductB* CreateProductB(); protected: private: };
#include "stdafx.h" #include "AbstractFactory.h" //AbstractFactory::AbstractFactory() //{ // //} AbstractFactory::~AbstractFactory() { } ConcreateFactory1::ConcreateFactory1() { } ConcreateFactory1::~ConcreateFactory1() { } AbstractProductA* ConcreateFactory1::CreateProductA() { return new ProductA1(); } AbstractProductB* ConcreateFactory1::CreateProductB() { return new ProductB1(); } ConcreateFactory2::ConcreateFactory2() { } ConcreateFactory2::~ConcreateFactory2() { } AbstractProductA* ConcreateFactory2::CreateProductA() { return new ProductA2(); } AbstractProductB* ConcreateFactory2::CreateProductB() { return new ProductB2(); }
#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
#include "stdafx.h" #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() { }
// AbstactFactory.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "Product.h" #include "AbstractFactory.h" #include <iostream> #include "windows.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { AbstractFactory* cf1 = new ConcreateFactory1(); Sleep(5000); cf1->CreateProductA(); Sleep(5000); cf1->CreateProductB(); Sleep(5000); AbstractFactory* cf2 = new ConcreateFactory2(); Sleep(5000); cf2->CreateProductA(); Sleep(5000); cf2->CreateProductB(); Sleep(5000); while(true); return 0; }
相关文章推荐
- 协同OA的一大核心五大特征你知道吗?
- Java操作Excel的四种方法
- 用报表系工具搭建证书查询系统示例
- Big Endian 和 Little Endian
- linux命令which whereis locate 命令
- Hibernate关联之 一对一连接表单向关联
- UVA-10026 Shoemaker's Problem (贪心)
- mysql如何快速删除重复的数据
- android实现滑动开关
- hdu 1829 A Bug's Life(并查集)
- JS 中 this上下文对象的使用方式
- mysql存储过程在动态SQL内获取返回值
- mongodb 常用操作命令大全1
- Ant自动编译打包&发布 android项目
- UTF-8编码字节含义-以及应用
- Spring 教程(一) 概述
- Web常用方法
- Spring MVC学习笔记:web.xml中load-on-startup的作用
- poj3304Segments【判断直线与多条线段相交】
- jquery的ajax同步和异步