我想避免使用标记类和大的if-else块或切换语句,而是将多态性用于类层次结构,我相信这是更好的做法.
例如,类似于下面的内容,其中执行方法的选择仅依赖于Actor类型的对象的一个字段.
switch(actor.getTagField())
{
case 1: actor.act1(); break;
case 2: actor.act2(); break;
[...]
}
Run Code Online (Sandbox Code Playgroud)
会成为
actor.act();
Run Code Online (Sandbox Code Playgroud)
并且act方法将在Actor的子类中被覆盖.
但是,在运行时决定实例化哪个子类的最明显的方法看起来与原始类似:
Actor newActor(int type)
{
switch(type)
{
case 1: return new Actor1();
case 2: return new Actor2();
[...]
}
}
Run Code Online (Sandbox Code Playgroud)
所以似乎没有真正获得任何东西; 逻辑刚刚被移动了.
有什么更好的方法呢?我能想出的唯一方法是为Actor的每个子类实现一个工厂类,但对于这样一个简单的问题,这似乎相当麻烦.
我是否想过这个?如果我在其他地方做同样的事情,似乎没有必要做出原始的改变.