interpreterは日本語で「解釈者」,「説明者」という意味になる.Interpreterパターンは,特定の言語の文法表現と,それを使用して分を解釈するインタープリタを定義するパターンである.
Interpreterパターンの主な要素は以下である.
java// AbstractExpression
interface Expression {
public boolean interpret(String context);
}
// TerminalExpression
class TerminalExpression implements Expression {
private String data;
public TerminalExpression(String data) {
this.data = data;
}
@Override
public boolean interpret(String context) {
return context.contains(data);
}
}
// Non-terminalExpression
class OrExpression implements Expression {
private Expression expr1;
private Expression expr2;
public OrExpression(Expression expr1, Expression expr2) {
this.expr1 = expr1;
this.expr2 = expr2;
}
@Override
public boolean interpret(String context) {
return expr1.interpret(context) || expr2.interpret(context);
}
}
// Client
public class InterpreterPattern {
public static void main(String[] args) {
Expression expr1 = new TerminalExpression("Hello");
Expression expr2 = new TerminalExpression("World");
Expression isHelloOrWorld = new OrExpression(expr1, expr2);
System.out.println(isHelloOrWorld.interpret("Hello"));
System.out.println(isHelloOrWorld.interpret("World"));
System.out.println(isHelloOrWorld.interpret("Hello World"));
System.out.println(isHelloOrWorld.interpret("Good Morning"));
}
}
あまり使うケースが無いような気がする.
木構造のようなデータ,例えば逆ポーランド記法を解析したいときなどは使えるだろう.文章なんかも各品詞をノードとして木構造で管理できるかもしれないが,今時はAIを使って解析する.
となると,文章以外でのユースケースだが,いまいち思いつかない.