【发布时间】:2012-05-09 05:32:35
【问题描述】:
我想避免使用标记类和大 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 的每个子类实现一个工厂类,但对于这样一个简单的问题,这似乎相当麻烦。
我是不是想多了?如果我只是在其他地方做几乎相同的事情,似乎没有必要进行原始更改。
【问题讨论】:
标签: java design-patterns polymorphism