Das beste Interpreter-Muster-Tutorial im Jahr 2024. In diesem Tutorial können Sie Einführung,Realisierung, lernen
Interpreter-Muster (Interpreter Pattern) bietet eine Möglichkeit, den Ausdruck Syntax oder Sprache zu bewerten, die auf die Art des Modells gehört. Dieser Modus setzt einen Ausdruck Schnittstelle, die einen bestimmten Kontext erklären. Dieses Modell wird in der SQL-Parsing, Symbolverarbeitungsmaschinen verwendet.
Absichten: eine Sprache, definieren ihre Grammatik Darstellung gegeben, und einen Dolmetscher definieren, verwendet der Interpreter das Logo Sätze in der Sprache zu interpretieren.
Haupt Lösung: Für einige feste Grammatik eines Satzes Konstruktion Dolmetscher zu erklären.
Wenn verwenden: Wenn die Frequenz einer bestimmten Art von Problem ausreichend hoch ist, kann es jede Instanz des Problems wert sein wird als einfache Sätze in der Sprache ausgedrückt.Damit Sie einen Dolmetscher zu bauen, zu der Interpreter das Problem zu lösen, indem sie diese Sätze zu interpretieren.
Wie zu beheben: Mitglied Syntaxbaum, die Definition von Terminator und Nicht - Terminal.
Der Schlüsselcode: Mitglied Klasse Umgebung, einige globale enthaltenen Informationen außerhalb Interpreter, in der Regel HashMap.
Anwendungsbeispiele: Compiler, Arithmetik Ausdrucksauswertung.
Vorteile: 1, eine bessere Skalierbarkeit und Flexibilität.2, hat einen neuen Weg, um den Ausdruck zu interpretieren. 3, einfach einfache Grammatik zu implementieren.
Nachteile: 1, können die Vorteile der Szene nehmen relativ klein ist.2. Für komplexe Grammatiken schwieriger aufrechtzuerhalten. 3 erläutern den Modus bewirkt, dass die Klasse zu erweitern. 4 erläutern den Modus mit rekursiven Methodenaufrufe.
Einsatzszenarien: 1 kann eine Sprache Sätze interpretiert werden müssen , durch eine abstrakte Syntaxbaum dargestellt werden.2, einige der wiederkehrende Probleme kann eine einfache Sprache auszudrücken sein. 3, eine einfache Grammatik, die Szene zu erklären.
Hinweis: Sie können relativ kleine Szene, JAVA , wenn Sie können stattdessen expression4J begegnen.
Wir schaffen und eine SchnittstelleExpressionExpression Entity - Klasse - Schnittstelle implementieren. Wie bereits im Zusammenhang mit der HauptdolmetscherTerminalExpressiondefiniert. Andere KlassenOrExpression,AndExpression für modulare Ausdrücke zu schaffen.
InterpreterPatternDemo,unsere Demonstration Klasse verwendetExpressionKlasse Parsing - Regeln und Präsentation Ausdrücke zu erstellen.
Erstellen Sie einen Ausdruck Schnittstelle.
Expression.java
public interface Expression { public boolean interpret(String context); }
Erstellen von Entity-Klasse implementiert die oben genannten Schnittstellen.
TerminalExpression.java
public class TerminalExpression implements Expression { private String data; public TerminalExpression(String data){ this.data = data; } @Override public boolean interpret(String context) { if(context.contains(data)){ return true; } return false; } }
OrExpression.java
public class OrExpression implements Expression { private Expression expr1 = null; private Expression expr2 = null; 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); } }
AndExpression.java
public class AndExpression implements Expression { private Expression expr1 = null; private Expression expr2 = null; public AndExpression(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } @Override public boolean interpret(String context) { return expr1.interpret(context) && expr2.interpret(context); } }
InterpreterPatternDemoverwenden , um dieExpressionKlassenregeln zu erstellen und sie zu lösen.
InterpreterPatternDemo.java
public class InterpreterPatternDemo { //规则:Robert 和 John 是男性 public static Expression getMaleExpression(){ Expression robert = new TerminalExpression("Robert"); Expression john = new TerminalExpression("John"); return new OrExpression(robert, john); } //规则:Julie 是一个已婚的女性 public static Expression getMarriedWomanExpression(){ Expression julie = new TerminalExpression("Julie"); Expression married = new TerminalExpression("Married"); return new AndExpression(julie, married); } public static void main(String[] args) { Expression isMale = getMaleExpression(); Expression isMarriedWoman = getMarriedWomanExpression(); System.out.println("John is male? " + isMale.interpret("John")); System.out.println("Julie is a married women? " + isMarriedWoman.interpret("Married Julie")); } }
Stellen Sie sicher, ausgegeben.
John ist männlich True Julie ist eine verheiratete Frauen True