设计模式之 工厂方法模式(C++实现)
来源:互联网 发布:学php去哪 编辑:程序博客网 时间:2024/05/21 03:54
这篇文章介绍设计模式中的 工厂方法模式。
前面两篇文章介绍了简单工厂模式的介绍和实现。
本文同样以汽车厂生产汽车为例介绍工厂方法模式。
代码如下:
#include <iostream>#include <string>#include <assert.h>using namespace std;// Abstract Productclass CarBase{public:// 虚函数 实现多态virtual ~CarBase(){}virtual void printName(){cout << "汽车厂商:" << m_Name << endl;}// 声明为protectedprotected:string m_Name;// 构造函数声明为protected 保证基类在外部不可实例化 必须继承CarBase(){}CarBase(const string& name) :m_Name(name){}};// 产品1class GMCar : public CarBase{public:// 声明构造函数为publicGMCar() :CarBase("通用汽车公司"){}void printName(){cout << "GMCar" << endl;CarBase::printName();}};// 产品2class FordCar : public CarBase{public:// 声明构造函数为publicFordCar() :CarBase("福特汽车公司"){}void printName(){cout << "FordCar" << endl;CarBase::printName();}};// 抽象工厂类 定义创建产品的接口class IFactory{public:virtual CarBase* create() = 0;// 虚函数 };class GMFactory :public IFactory{public:CarBase* create(){return new GMCar();}};class FordFactory :public IFactory{public:CarBase* create(){return new FordCar();}};void testFactoryMethodMode(){IFactory* pFactory = NULL;// 抽象基类指针CarBase* pCar = NULL;// 基类指针// 栈分配 工厂实例类对象GMFactory gmFactory;FordFactory fordFactory;pFactory = &gmFactory;pCar = pFactory->create();pCar->printName();delete pCar;// 避免内存泄露pFactory = &fordFactory;pCar = pFactory->create();pCar->printName();delete pCar;// 注意内存泄露pCar = NULL;pFactory = NULL;}int main(void){testFactoryMethodMode();return 0;}
0 0
- C#--设计模式之工厂方法模式
- 设计模式之简单工厂,工厂方法模式(c++)
- 设计模式的实现(C++)------工厂方法模式(FactoryMethod)
- 使用Object-C实现23种设计模式之工厂方法模式
- 设计模式之—工厂方法模式(FactoryMethod)-Java实现
- GOF23设计模式之工厂方法模式的实现
- scala实现设计模式之工厂方法模式
- 设计模式之 工厂方法模式(C++实现)
- 设计模式之工厂方法模式(C++实现)
- 设计模式之工厂方法模式的简单实现
- 《大话设计模式》java实现之工厂方法模式
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式 之 工厂方法
- 设计模式 之 工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 设计模式之工厂方法
- 优先队列解哈夫曼编码问题之带权路径长度
- FragmentActivity与Fragment两者交互方法简介
- s3c2440-外部中断
- Retrofit 2.0 文件上传类型
- Katana Op for visualization of OpenVDB
- 设计模式之 工厂方法模式(C++实现)
- 牛客网笔记之JAVA运算符
- Regionals 2015 Asia - Daejeon acmliveoj7233 - Polynomial
- 在Struts2中使用ValueStack、ActionContext、ServletContext、request、session等
- QT5.6 编译SQLServer驱动
- win7+python2.7下安装spark
- 我对MVP模式的初步理解
- FreeMarker分页组件监听器
- linux 文件类的命令(整理)