【发布时间】:2012-03-07 19:12:17
【问题描述】:
我有一个模型视图架构。我想从模型对象创建一个视图对象。 这是一个基本示例。
我如何指定模型对象的类型:枚举(但它们不可扩展)、整数(但很容易搞砸)...
class ModelA
{
ModelA(int a);
}
class ModelB : public ModelA
{
ModelB(int a,int b);
}
class ViewModelA
{
ViewModelA(ModelA* ma);
}
class ViewModelB : public ViewModelA
{
ViewModelB(ModelB* mb);
}
class ViewFactory
{
ModelA * createFromModel(ModelA *ma)
{
// Now what is the best way to store type ???
// Used an integer and overload a static method getType()
// Or use an enum?
switch(ma.type)
{
}
}
}
int main(int argc, char *argv[])
{
ModelA *ma = new ModelA(10);
ModelA *mb = new ModelB(10,11);
ViewFactory myFactory;
ViewModelA *va = myFactory.createFromModel(ma);
ViewModelB *vb = myFactory.createFromModel(mb);
//va should be a model of ViewModelA and vb a model of ViewModelB
}
【问题讨论】:
-
这里为什么不直接使用多态,而不是存储类型和switch语句呢?您的
createFromModel函数只会调用ModelA指针上的成员函数,并且会多态地选择适当的函数。
标签: c++ design-patterns types factory