设计模式之 工厂方法模式(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