有这样的东西:
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
就像如果super
不处理它然后尝试处理它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
as in Base
?我想知道是否有更好的设计,其次我是否必须为它创建一个新的 Token 类Major
或者如果我可以以某种方式扩展或以其他方式重用现有的。
编辑:概念点是拥有Base
我可以在处理各种类型输入的不同项目中轻松重用该类。