Was ist der Dolmetschermodus?
Das Interpreter-Entwurfsmuster wird verwendet, um die Schlüsselelemente einer Entität zu analysieren und für jedes Element eine eigene Erklärung oder entsprechende Aktion bereitzustellen.
Interpreter-Musterprobleme und Lösungen
Das Interpreter-Entwurfsmuster ist etwas, das wir oft verwenden, aber nicht verwenden t Eines der wenigen gängigen Designmuster, die man kennen sollte. Dieses Entwurfsmuster ist nicht auf die Klassenerstellung beschränkt. Bei der Erstellung der meisten Programmieralgorithmen verwenden wir die Grundkonzepte des Interpreter-Entwurfsmusters.
Um das Funktionsprinzip des Interpreter-Entwurfsmusters zu verstehen, nehmen wir die Verarbeitung der Makrosprache als Beispiel. Der für jedes Makro geschriebene Befehl ist selbst eine Sammlung weiterer Befehle. Die vereinfachte Makrosprache erleichtert Programmierern die Durchführung von Erstellungsvorgängen, ohne die Syntax anderer Systembefehle berücksichtigen zu müssen. Dies kann in manchen Fällen auch die Sicherheit verbessern, wenn der Programmierer keinen direkten Zugriff auf Systembefehle hat. Stattdessen schreiben Programmierer Wrapper-Methoden, um Systembefehle in einer Art Sandbox auszuführen. Die rote Sprache wird interpretiert und in einen Satz auszuführender Befehle umgewandelt.
Sie können sich auch über das Interpreter-Entwurfsmuster informieren, indem Sie sich das Vorlagensystem ansehen. Spezifische vordefinierte Schlüsselwörter oder Symbole werden definiert, um andere Dinge darzustellen. Ein Vorlagenprozessor wird verwendet, um Code zu akzeptieren, jedes Schlüsselwort so zu interpretieren, dass es auf einen bestimmten Befehlssatz verweist, und den Code auszuführen.
Der Aufbau von Systemen, die auf dem Interpreter-Entwurfsmuster basieren, ermöglicht es Dritten oder Benutzern, die vom System bereitgestellten Daten flexibler darzustellen und abzurufen. Anstatt den Typ der abzurufenden Daten über vordefinierte Methodennamen oder bestimmte Konstanten anzugeben, verwenden wir Schlüsselwörter, um diese Daten abzurufen.
UML
Dieses Diagramm beschreibt detailliert einen Klassenentwurf unter Verwendung des Interpreter-Entwurfsmusters.
Das Folgende ist eine Erklärung des obigen Bildes:
1 Die MyObject-Klasse verarbeitet den Inhalt, der interpretiert werden muss. Es verfügt über einen privaten Zeichenfolgeninhalt, der den zu verarbeitenden Inhalt speichert.
2. Die Methode „storeContent()“ akzeptiert einen Parameter mit dem Namen „content“. Diese Methode interpretiert den Verarbeitungsinhalt vor und speichert das Ergebnis im MyObject-Objekt.
3. Anschließend wird die Methode applyInterpretation() aufgerufen. Diese Methode erstellt eine Instanz der MyInterpreter-Klasse. MyInterpreter verfügt über eine öffentliche Methode namens interpretKeys(), die den Parameter content.applyInterpretation() akzeptiert und den internen Inhalt des Parameters abruft. Die MyInterpreter-Klasse interpretiert den zu verarbeitenden Inhalt und gibt das Ergebnis an MyObject zurück. Als nächstes ersetzt die Methode applyInterpretation() die interne Inhaltsvariable.
4. Schließlich stellt MyObject den interpretierten Inhalt über die Methode getContent() bereit.
Verwendungsbeispiele
Der Codeteil der grammatikalischen Rekursion muss entsprechend der spezifischen Situation implementiert werden, sodass er sich nicht im Code widerspiegelt. Abstrakte Ausdrücke sind der Schlüssel zum Generieren von Grammatiksätzen. Jeder nichtterminale Ausdruck interpretiert eine minimale Grammatikeinheit und kombiniert diese Grammatikeinheiten dann rekursiv zu einer vollständigen Grammatik.
class Context {} abstract class Expression { public abstract Object interpreter(Context ctx); } class TerminalExpression extends Expression { public Object interpreter(Context ctx){ return null; } } class NonterminalExpression extends Expression { public NonterminalExpression(Expression...expressions){ } public Object interpreter(Context ctx){ return null; } } public class Client { public static void main(String[] args){ String expression = ""; char[] charArray = expression.toCharArray(); Context ctx = new Context(); Stack<Expression> stack = new Stack<Expression>(); for(int i=0;i<charArray.length;i++){ //进行语法判断,递归调用 } Expression exp = stack.pop(); exp.interpreter(ctx); } }
Das obige ist der detaillierte Inhalt vonPHP-objektorientierte erweiterte Entwurfsmuster: Beispiele für die Verwendung von Interpretermustern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!