我的程序需要像这样运行:
./myprogram inputType [Can be I1, I2 or I3]
该程序的大部分功能如下:
void Foo::foo (IType inputType) {
// Some common code
if (inputType == I1) ... // some I1 specific code
if (inputType == I2) ... // Some I2 specific code
...// similarly for I3
}
这些对 inputType 的检查分散在多个地方,并且随着时间的推移变得越来越难以管理。我曾想过将此代码重构为:
InputType* iType = new InputTypeI1(); // or I2 or I3
void Foo::foo (IType inputType) {
// Some common code
iType.DoSomething(this, arg1, arg2,..)
}
class InputType1 : public InputType
{
// Virtual functions.. (with default implementations)
}
InputType1::DoSomething(Foo* f, Arg1* arg1, Arg2* arg2)
{
f->DoSomethingFor1(arg1, arg2);
}
这导致为 I1、I2 或 I3 组织事物,并根据输入类型自动调用相关函数。但是,我觉得这可以做得更好。有什么建议么?