工厂模式用于,通过统一的创建对象接口来创建对象,而子类可以决定对象的创建方式。
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; } };