工厂模式用于,通过统一的创建对象接口来创建对象,而子类可以决定对象的创建方式。
class CObject
{
};
class CCar : public CObject
{
};
class CFactory
{
virtual CObject* Create() = 0;
};
class CCarFactory : CFactory
{
virtual CObject* Create()
{
return new CCar;
}
};
那么将工厂模式运用到Utility模块中的方式为:class YKObject
{
};
class YKMapObject
{
// YKObjectSPtr为智能指针
virtual YKObjectSPtr CreateObj(YK_ID id = 0, YK_BOOL bTemp = false) = 0;
};
template <class T>
class YKMapT : YKMapObject
{
virtual YKObjectSPtr CreateObj(YK_ID id = 0, YK_BOOL bTemp = false) {
if (bTemp)
id = 0;
// 为每个对象指定一个ID,即每个对象将关联一个ID
const YK_ID newId = YKIDCreater::Instance()->CreateNewID(id);
reference objPtr = Get(newId);
if (objPtr.ValidObj())
return objPtr;
// 外界可提供额外的创建参数,类似于MFC中的OnCreate响应方式
std::vector<YKAny> vecParam;
value_type newObj(true);
newObj->SetID(newId);
if (newObj->Create(vecParam))
{
Insert(newObj, bTemp);
return newObj;
}
return YK_NULL;
}
};