有这样的东西:
public enum Token
{
FOO("foo", "f"),
QUIT("quit", "q"),
UNKNOWN("", "");
...
public parse(String s) {
for (Token token : values()) {
...
return token;
}
return UNKNOWN;
}
}
一个抽象类:
abstract class Base
{
private boolean run;
Base() {
run = true;
while (run) {
inp = getInput();
act(inp);
}
}
public boolean act(String s) {
boolean OK = true;
switch (Token.parse(inp)) { /* Enum */
case FOO:
do_foo();
break;
case QUIT:
run = false;
break;
case UNKNOWN:
print "Unknown" + inp;
OK = false;
break;
}
}
return OK;
}
}
和扩展器:
class Major extends Base
{
}
我想要的是扩展act
为 ifsuper
不处理它然后尝试在Major
. 例如添加PRINT_STAT("print-statistics", "ps")
- 但同时让Base
类处理默认值,如QUIT
.
这是一个完全错误的方法吗?
到目前为止我所做的是添加一个接口通常:
public interface BaseFace
{
public boolean act_other(String inp);
}
在课堂上Base implements BaseFace
:
case UNKNOWN:
OK = act_other(inp);
在课堂上Major
:
public boolean act_other(String inp) {
if (inp.equals("blah")) {
do_blah();
return true;
}
return false;
}
这看起来像一个可用的设计吗?
而且,主要问题:
是否有一些好方法来扩展Token
类,以便我可以使用与中相同的切换Major
方法Base
?我想知道是否有一个更好的设计,第二个是我是否必须创建一个新的 Token 类,Major
或者我是否可以以某种方式扩展或以其他方式重用现有的。
编辑:概念点是Base
让我可以在处理各种类型输入的不同项目中轻松重用的类。