我想避免使用标记类和大 if-else 块或 switch 语句,而是使用具有类层次结构的多态性,我认为这是更好的做法。
例如,如下所示,执行方法的选择仅依赖于 Actor 类型对象的一个字段。
switch(actor.getTagField())
{
case 1: actor.act1(); break;
case 2: actor.act2(); break;
[...]
}
会成为
actor.act();
并且 act 方法将在 Actor 的子类中被覆盖。
然而,在运行时决定实例化哪个子类的最明显方法看起来与原始方法非常相似:
Actor newActor(int type)
{
switch(type)
{
case 1: return new Actor1();
case 2: return new Actor2();
[...]
}
}
所以似乎什么都没有真正得到;逻辑刚刚被移动。
有什么更好的方法来做到这一点?我能想出的唯一方法是为 Actor 的每个子类实现一个工厂类,但对于这样一个简单的问题,这似乎相当麻烦。
这是我想太多了吗?如果我只是在其他地方做几乎相同的事情,那么进行原始更改似乎没有意义。