今天学习了C++设计模式的工厂模式,提供的示例代码比较简单,但足以说明工厂模式是怎么实现的。
工厂模式的两个特点:
1、工厂模式封装了创造对象的接口
2、将对象的创建延迟到子类,具体的实例化由子类提供。
示例代码如下:
//product.h
#ifndef _PRODUCT_H
#define _PRODUCT_H
class Product
{
public:
virtual ~Product() = 0;
protected:
Product();
};
class ConcreteProduct :public Product
{
public:
ConcreteProduct();
~ConcreteProduct();
};
#endif
//product.c
#include "factory.h"
#include "product.h"
#include <iostream>
using namespace std;
Factory::Factory()
{
}
Factory::~Factory()
{
}
ConcreteFactory::ConcreteFactory()
{
cout<<"this is ConcreteFactory"<<endl;
}
ConcreteFactory::~ConcreteFactory()
{
}
Product* ConcreteFactory::CreateProduct()
{
return new ConcreteProduct();
}
//factory.h
#ifndef _FACTORY_H
#define _FACTORY_H
class Product;
class Factory
{
public:
virtual ~Factory() =0;
virtual Product* CreateProduct()=0;
protected:
Factory();
};
class ConcreteFactory: public Factory
{
public:
ConcreteFactory();
~ConcreteFactory();
Product* CreateProduct();
};
#endif
//factory.c
#include "factory.h"
#include "product.h"
#include <iostream>
using namespace std;
Factory::Factory()
{
}
Factory::~Factory()
{
}
ConcreteFactory::ConcreteFactory()
{
cout<<"this is ConcreteFactory"<<endl;
}
ConcreteFactory::~ConcreteFactory()
{
}
Product* ConcreteFactory::CreateProduct()
{
return new ConcreteProduct();
}
在这里为子类ConcreteProduct实现了自己的ConcreteFactory工厂,如果有更多的子类,可以为具体的子类实现自己的创建对象工厂,也可以在原有工厂类的基础上,让创建对象接口参数化,根据具体的参数,创建对应的对象。