我有一个类,它有几个派生类,每个类都有自己的构造函数。
class A
{
public:
static A *create_new_A(int child_ID);
member_data;
void method();
};
class A_child_0 : public A
{
A_child_0(int child_ID);
//stuff
};
class A_child_1 : public A
{
A_child_1(int child_ID);
//stuff
};
etc...
在主文件中,这些被调用如下:
A **array;
array = new A *[nchildren];
for (int i = 0 ; i < nchildren ; i++)
{
array[i] = A->create_new_A( i );
}
其中 A 是一个看起来像这样的工厂:
A* A::create_new_A(int child_ID)
{
if (child_ID == 0)
{
return new A_child_0(child_ID);
}
if (child_ID == 1)
{
return new A_child_1(child_ID);
}
}
现在,当调用 A_child_n 的构造函数时,现在我在派生类之间略有不同的 member_data 值的初始化中有一堆程序命令,例如,
A_child_0(int child_ID)
{
member_data.vector1[0] = 0;
for (i = 0; i < 200; i++)
member_data.vector2[0] = i;
read_in_conf_file("conf.txt")
// etc....
}
A_child_1(int child_ID)
{
member_data.vector1[0] = 0;
for (i = 0; i < 50; i++)
member_data.vector2[0] = i*i;
read_in_conf_file("conf.txt")
// etc....
}
我很好奇的是是否有更好的方法来解决这个问题。现在我正在考虑封装很多这些程序步骤,所以它看起来像
A_child_0(int child_ID)
{
initializer_class *intializer;
initializer->initialize(child_ID);
}
A_child_1(int child_ID)
{
initializer_class *intializer;
initializer->initialize(child_ID);
}
并有一个类 initializer() 实现不同类的初始化步骤。我想这大概是受到策略模式的启发。有人对这种方法是否合适或明智有任何建议吗?或者它只是将问题归结为初始化类并引入了额外的复杂层。如果做这样的事情是一个坏主意,可以做些什么来避免构造函数是一个长的 C 程序?
编辑:正如一些人指出的工厂指定不正确。在我给出的示例中,它仍然没有真正完善,但它并不像以前那样偏离标准。