这是第二次来写博客,本着严谨的态度,这次的主题是工厂模式。工厂模式负责着大型项目成千上百的对象的统一实例化,这样的好处,统一管理,清晰明了。当你的需求发生改变的时候仅仅需要修改负责生产的工厂,而不需要修改客户对工厂的调用代码。由于网上的工厂模式很多,所以今天要写的是一个可以通用的工厂模板,如下:
#ifndef _FACTORY_H
#define _FACTORY_H
#include <map>
// define the constructor method, change as your request
template<typename TBaseClass, typename TClass> TBaseClass* createClassType()
{
return new TClass;
}
// define factory
template<typename TKey, typename TBaseClass> class Factory
{
private:
typedef TBaseClass* ( *Constructor )();
typedef std::map< TKey, Constructor > ContructorMap;
public:
//---------------------registe class to factory--------------------
template<typename TClass> void registerClass( TKey identifier )
{
Constructor tContructor = &createClassType< TBaseClass, TClass >;
mRegistedClassConstructorList.insert( std::make_pair( identifier , tConstructor ) );
}
//-------------------create instance according identifier-----------
TBaseClass* createInstance( TKey identifier )
{
Constructor tConstructor = mRegistedClassConstructorList[identifier];
if ( tConstructor != NULL )
{
return tConstructor();
}
return NULL;
}
//------------------------------------------------------------------
private:
ContructorMap mRegistedClassConstructorList;
}
#endif //_FACTORY_H
将以后需要生产的零件类型(TClass)事先注册到工厂的厂房(map)里,就可以随时生产出需要的零件实例, 确保你生产的各种零件是TBaseClass的派生类就可以了