我有一个基类,
class Msg
{
public:
ParseMsg()
{
ParseMsgData();
ParseTrailer();
}
virtual void ParseMsgData() = 0;
ParseTrailer();
};
和派生类,
class InitiateMsg : public Msg
{
public:
void ParseMsgData() { ... }
};
class ReadOperationMsg public Msg
{
public:
void ParseMsgData() { ... }
};
class WriteOperationMsg public Msg
{
public:
void ParseMsgData() { ... }
};
场景如下,
void UsageFunction(string data)
{
Msg* msg = ParseHeader(data);
ParseMsg
}
Msg* ParseHeader(string data)
{
Msg *msg = NULL;
....
switch()
{
case 1:
msg = new InitiateMsg();
break;
case 2:
msg = new ReadOperationMsg{();
break;
case 3:
msg = new WriteOperationMsg{();
break;
....
}
return msg;
}
基于数据,ParseHeader 方法将决定必须创建哪个对象,所以我在我使用的类之外实现了 ParseHeader 函数。如何在 Msg 类中创建 ParseHeader 函数然后使用它?
在 C# 中,通过在类中将 ParseHeader 方法定义为静态方法并从外部使用它来实现同样的效果,
最佳答案
您需要 Abstract Factory 设计模式。它是为像您这样的场景定制的。
内联链接用一个简单的例子比我在这里解释得更详细。
关于C++ 动态对象构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10083391/