Tasarım Kalıpları - Yorumlayıcı Kalıbı
Tercüman kalıbı, dil grameri veya ifadesini değerlendirmek için bir yol sağlar. Bu tür bir örüntü, davranış kalıbına girer. Bu model, belirli bir bağlamı yorumlamayı söyleyen bir ifade arayüzünün uygulanmasını içerir. Bu model SQL ayrıştırma, sembol işleme motorunda vb. Kullanılır.
Uygulama
Biz bir arayüz oluşturmak için gidiyoruz Expression ve uygulama beton sınıfları İfade arayüzü. Söz konusu bağlamın ana yorumlayıcısı olarak görev yapan bir sınıf TerminalExpression tanımlanır. Diğer sınıflar OrExpression , AndExpression , kombinasyonel ifadeler oluşturmak için kullanılır.
Demo sınıfımız InterpreterPatternDemo , kurallar oluşturmak ve ifadelerin ayrıştırılmasını göstermek için Expression sınıfını kullanacaktır .
Aşama 1
Bir ifade arayüzü oluşturun.
Expression.java
public interface Expression {
public boolean interpret(String context);
}
Adım 2
Yukarıdaki arayüzü uygulayarak somut sınıflar oluşturun.
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);
}
}
Aşama 3
InterpreterPatternDemo , kurallar oluşturmak ve sonra bunları ayrıştırmak için Expression sınıfını kullanır .
InterpreterPatternDemo.java
public class InterpreterPatternDemo {
//Rule: Robert and John are male
public static Expression getMaleExpression(){
Expression robert = new TerminalExpression("Robert");
Expression john = new TerminalExpression("John");
return new OrExpression(robert, john);
}
//Rule: Julie is a married women
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"));
}
}
4. adım
Çıkışı doğrulayın.
John is male? true
Julie is a married women? true