提到这个类我们不得不提及Template GenericManager
下面对成员函数进行分析
对于一个管理类的,它的操作总少不了对map成员变量的增删,
(如果加入改查的话,可能manager的职能就太细了。manager这种paradim)
值得介绍的应属对控件的创建:
IObject* FactoryManager::createObject(const std::string& _category, const std::string& _type)
{
MapRegisterFactoryItem::iterator category = mRegisterFactoryItems.find(_category);
if (category == mRegisterFactoryItems.end())
{
return nullptr;
}
MapFactoryItem::iterator type = category->second.find(_type);
if (type == category->second.end())
{
return nullptr;
}
if (type->second.empty())
{
return nullptr;
}
IObject* result = nullptr;
type->second(result);
return result;
}
可以看到凡是继承与基类IObject 的子类都可以通过FactoryManger创建。这就为控件的动态生成埋下伏笔。
何时调用createObject
猜测 有两种可能:
1)hard code
2)通过Widget来注册注入。