Interpreter-Entwurfsmuster in Java

Das Interpreter Design Pattern definiert die grammatikalische Darstellung für eine objektorientierte Programmiersprache. Es regelt die Nuancen der Syntax und bietet Benutzern einen konkreten Interpreter, der auf die vom Muster selbst bereitgestellte Darstellung zurückgreift, um Codezeilen zu decodieren, die in dieser bestimmten Sprache geschrieben sind. Eine einfache Möglichkeit, sich das vorzustellen, besteht darin, sich die Arbeit eines Dolmetschers vorzustellen. Ein Dolmetscher wandelt Sätze, die in einer Fremdsprache gesprochen oder geschrieben wurden, nach bestimmten Regeln in eine für Sie leicht verständliche Sprache um. Das Muster funktioniert hier wie das Regelwerk und der Interpreter folgt.

Definition

Wie im Gang of Four Book of Design Patterns definiert, "definiert das Interpretermuster bei einer bestimmten Sprache eine Darstellung für ihre Grammatik zusammen mit einem Interpreter, der die Darstellung verwendet, um Sätze in der Sprache zu interpretieren."

Struktur

  • AbstractExpression(): Dies ist die Hauptschnittstelle, in der die Operation ausgeführt wird.
  • Terminal Expression(): Interpretiert für Terminal-Ausdrücke
  • Nonterminal Expression(): Interpretiert für nichtterminale Ausdrücke
  • Context(String): Der String, der interpretiert werden muss
  • Client(): Verantwortlich für das Erstellen oder Übergeben des Abstrakten Syntaxbaums (ABS)

Beispiel und Code

Das Folgende ist ein einfaches Beispiel für eine Sprachdarstellung. Wenn das verwendete Wort 'OR' ist, wird einer der beiden Ausdrücke zurückgegeben. Wenn das verwendete Wort 'UND' ist, werden beide Ausdrücke zurückgegeben.

Schnittstelle der öffentlichen Klasse Test { Boolean interpret(String word); } // Diese Klasse implementiert das Wort. Es wird zur Kontrolle aufbewahrt, um sicherzustellen, dass das Wort im Kontext mit dem übereinstimmt, das der Dolmetscher verwendet. Klasse TerminalExpression implementiert Test { String word; public TerminalExpression (String-Wort) this.word = Wort; public Boolean interpret(String wrd) { if (wrd.equals(“word”)) return true; sonst false zurückgeben; } } //Jetzt legen wir die Wörter für den Interpreter fest, indem wir zwei separate Klassen für OR und AND erstellen. Klasse wordOR implementiert Test { Test wrd1; Test wrd2; öffentliches ODERwort (Test wrd1, Test wrd2) { this.wrd1 = wrd1; this.wrd2 = wrd2; } public boolean interpret(String wrd) return wrd1.interpret(wrd) || wrd2.interpret(wrd); } } class wordAND implementiert Test { Test wrd1; Test wrd2; öffentliches ANDword (Test wrd1, Test wrd2) { this.wrd1 = wrd1; this.wrd2 = wrd2; } public boolean interpret(String wrd) return wrd1.interpret(wrd) && wrd2.interpret(wrd); } }

 

Wann sollte das Interpreter Design Pattern verwendet werden?

Das Interpreter-Design-Pattern gewinnt an Bedeutung, wenn Sie einen abstrakten Syntaxbaum generieren möchten, indem Sie auf eine einfache, Ihnen zur Verfügung stehende Grammatik verweisen. Ein weiteres Beispiel, bei dem Interpretermuster in großem Umfang verwendet werden, sind Berichtsgeneratoranwendungen. Da jede Ausgabe eindeutig von der vorherigen sein muss, ist der Interpreter im Vergleich zu anderen Entwurfsmustern besser in der Lage, solche Situationen zu lesen.

Hinterlassen Sie eine Nachricht

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahren Sie, wie Ihre Kommentardaten verarbeitet werden.