Maison  >  Article  >  développement back-end  >  Modèles de conception avancés orientés objet PHP : exemples d'utilisation de modèles d'interprète

Modèles de conception avancés orientés objet PHP : exemples d'utilisation de modèles d'interprète

巴扎黑
巴扎黑original
2017-05-23 13:45:381484parcourir

Qu'est-ce que le mode interprète ?

Le modèle de conception de l'interprète est utilisé pour analyser les éléments clés d'une entité et fournir sa propre explication ou action correspondante pour chaque élément.


Problèmes et solutions du modèle d'interprète

Le modèle de conception d'interprète est quelque chose que nous utilisons souvent, mais nous ne le faisons pas t L'un des rares modèles de conception courants à connaître. Ce modèle de conception ne se limite pas à la création de classes. Dans le processus de création de la plupart des algorithmes de programmation, nous utilisons les concepts de base du modèle de conception de l'interpréteur.

Afin de comprendre le principe de fonctionnement du modèle de conception de l'interpréteur, nous prenons comme exemple le traitement du langage macro. La commande écrite pour chaque macro est elle-même une collection de commandes supplémentaires. Le langage macro simplifié permet aux programmeurs d'effectuer plus facilement les opérations de création sans avoir à prendre en compte la syntaxe des autres commandes système. Cela peut également améliorer la sécurité dans certains cas, où le programmeur n'a pas d'accès direct aux commandes du système. Au lieu de cela, les programmeurs écrivent des méthodes wrapper pour exécuter des commandes système dans une sorte de bac à sable. Le langage rouge est interprété et converti en un ensemble de commandes à exécuter.

Vous pouvez également en apprendre davantage sur le modèle de conception de l'interprète en consultant le système de modèles. Des mots-clés ou symboles prédéfinis spécifiques sont définis pour représenter d'autres choses. Un processeur de modèles est utilisé pour accepter le code, interpréter chaque mot-clé pour faire référence à un ensemble spécifique d'instructions et exécuter le code.

La création de systèmes basés sur le modèle de conception de l'interprète permet aux tiers ou aux utilisateurs de représenter et de récupérer de manière plus flexible les données fournies par le système. Au lieu d'indiquer le type de données à récupérer via des noms de méthodes prédéfinis ou des constantes spécifiques, nous utilisons des mots-clés pour récupérer ces données.


UML

Ce diagramme détaille une conception de classe utilisant le modèle de conception Interpreter.

Modèles de conception avancés orientés objet PHP : exemples dutilisation de modèles dinterprète

Ce qui suit est une explication de l'image ci-dessus :

1 La classe MyObject gère le contenu qui doit être interprété. Il possède une chaîne de contenu privée, qui stocke le contenu qui doit être traité.

2. La méthode storeContent() accepte un paramètre nommé content. Cette méthode pré-interprète le contenu du traitement puis stocke le résultat dans l'objet MyObject.

3. La méthode applyInterpretation() sera alors appelée. Cette méthode crée une instance de la classe MyInterpreter. MyInterpreter possède une méthode publique nommée performKeys(), qui accepte le paramètre content.applyInterpretation() et obtient le contenu interne du paramètre. La classe MyInterpreter effectue une interprétation sur le contenu à traiter et renvoie le résultat à MyObject. Ensuite, la méthode applyInterpretation() remplace la variable de contenu interne.

4. Enfin, MyObject fournit le contenu interprété via la méthode getContent().

Exemples d'utilisation

La partie code de la récursivité grammaticale doit être implémentée en fonction de la situation spécifique, elle n'est donc pas reflétée dans le code. Les expressions abstraites sont la clé pour générer des ensembles de grammaire. Chaque expression non terminale interprète une unité de grammaire minimale, puis combine récursivement ces unités de grammaire en une grammaire complète.

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);
	}
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn