工廠模板-遊戲開發

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

#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的派生類就可以了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章