這是第二次來寫博客,本着嚴謹的態度,這次的主題是工廠模式。工廠模式負責着大型項目成千上百的對象的統一實例化,這樣的好處,統一管理,清晰明瞭。當你的需求發生改變的時候僅僅需要修改負責生產的工廠,而不需要修改客戶對工廠的調用代碼。由於網上的工廠模式很多,所以今天要寫的是一個可以通用的工廠模板,如下:
#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的派生類就可以了