このようなものを持っている:
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
かのように拡張してから、で処理しようとすることです。たとえば、add-ですが、同時に、クラスに。のようなデフォルトを処理させます。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
を拡張する良い方法はありBase
ますか?私が疑問に思うのは、1つはより良い設計であり、2つ目は、新しいTokenクラスを作成する必要があるのMajor
か、または何らかの方法で既存のものを拡張または再利用できるのかということです。
編集:概念実証は、Base
さまざまなタイプの入力を処理するさまざまなプロジェクトで簡単に再利用できるクラスを用意することです。