貌似与FactoryManger 与 GenericFactory 的效用相似
但是它采用了继承关系:
两层关系:
IWidgetFactory
而BaseWidgetFactory 很值得注意,因为作者在MyGui的命名空间中引入 namespace factory
引入代码:
这种模式在MyGUI中应该是过时的:
因为关于IWidgetFactory的操作都是
/*obsolete:*/
#ifndef MYGUI_DONT_USE_OBSOLETE
MYGUI_OBSOLETE("use : void WidgetManager::destroyWidgets(VectorWidgetPtr &_widgets)")
void destroyWidgetsVector(VectorWidgetPtr &_widgets) { destroyWidgets(_widgets); }
MYGUI_OBSOLETE("")
Widget* findWidgetT(const std::string& _name, bool _throw = true);
MYGUI_OBSOLETE("")
Widget* findWidgetT(const std::string& _name, const std::string& _prefix, bool _throw = true);
MYGUI_OBSOLETE("")
void registerFactory(IWidgetFactory * _factory);
MYGUI_OBSOLETE("")
void unregisterFactory(IWidgetFactory * _factory);
MYGUI_OBSOLETE("use : void Widget::setProperty(const std::string &_key, const std::string &_value)")
void parse(Widget* _widget, const std::string &_key, const std::string &_value);
MYGUI_OBSOLETE("")
ParseDelegate& registerDelegate(const std::string& _key);
MYGUI_OBSOLETE("")
void unregisterDelegate(const std::string& _key);
template <typename T>
MYGUI_OBSOLETE("")
T* findWidget(const std::string& _name, bool _throw = true)
{
Widget* widget = findWidgetT(_name, _throw);
if (nullptr == widget) return nullptr;
return widget->castType<T>(_throw);
}
template <typename T>
MYGUI_OBSOLETE("")
T* findWidget(const std::string& _name, const std::string& _prefix, bool _throw = true)
{
return findWidget<T>(_prefix + _name, _throw);
}
#endif // MYGUI_DONT_USE_OBSOLETE
而且在加载过程的日志中并没有对其有说明!
所以暂时不对这两个类进行过多的分析.