Interpreter Pattern (Tasarım Deseni), özellikle bir dilin ya da ifadenin gramerini temsil eden yapıların analiz edilmesi ve bu yapıların çalıştırılması gereken durumlarda kullanılmaktadır. Bu desen, genellikle bir dilin sözdizimini çözmek ve bu sözdizimine uygun komutları çalıştırmak amacıyla geliştirilmiştir.
İçerik
Interpreter Pattern Nedir?
Interpreter Pattern, bir dilin gramerine uygun ifadeleri çözümlemek ve bu ifadelerin anlamını yorumlamak için kullanılır. Bu desende, dilin gramerini temsil eden bir dizi sınıf oluştururuz. Bu sınıflar, gramerin her bir kuralını temsil eder. Bu sayede, dilin her ifadesi bir nesne olarak temsil edilir ve bu nesne üzerinden yorumlama işlemi gerçekleştirilir.
Interpreter Pattern Uygulanışı
Bu deseni daha iyi anlamak için basit bir örnek üzerinden ilerleyelim. Örneğimizde, matematiksel ifadeleri (örneğin, “5 + 10” veya “20 – 3”) yorumlayan bir Interpreter sınıfı tasarlayacağız.
1. İfade Arayüzü (Expression Interface)
İlk adım olarak, bir Expression
arayüzü tanımlayacağız. Bu arayüz, tüm ifadeler için ortak olan interpret
metodunu içerecektir.
interface Expression {
int interpret();
}
2. Terminal İfadeler (Terminal Expressions)
Şimdi, sabit değerleri ve temel aritmetik işlemleri temsil eden sınıfları tanımlayalım.
class NumberExpression implements Expression {
private int number;
public NumberExpression(int number) {
this.number = number;
}
@Override
public int interpret() {
return this.number;
}
}
class PlusExpression implements Expression {
private Expression leftExpression;
private Expression rightExpression;
public PlusExpression(Expression leftExpression, Expression rightExpression) {
this.leftExpression = leftExpression;
this.rightExpression = rightExpression;
}
@Override
public int interpret() {
return this.leftExpression.interpret() + this.rightExpression.interpret();
}
}
class MinusExpression implements Expression {
private Expression leftExpression;
private Expression rightExpression;
public MinusExpression(Expression leftExpression, Expression rightExpression) {
this.leftExpression = leftExpression;
this.rightExpression = rightExpression;
}
@Override
public int interpret() {
return this.leftExpression.interpret() - this.rightExpression.interpret();
}
}
3. İfade Yorumlayıcısı (Interpreter)
Son olarak, bir Interpreter
sınıfı oluşturarak bu ifadeleri yorumlayabiliriz.
class Interpreter {
public static void main(String[] args) {
// (5 + 10) - 3 ifadesini yorumla
Expression expression = new MinusExpression(
new PlusExpression(new NumberExpression(5), new NumberExpression(10)),
new NumberExpression(3)
);
int result = expression.interpret();
System.out.println("Sonuç: " + result); // Sonuç: 12
}
}
Sonuç
Interpreter Tasarım Deseni, karmaşık dillerin ya da ifadelerin gramerini çözmek ve bu ifadeleri çalıştırmak için oldukça kullanışlıdır. Bu desen, gramerin her bir kuralını temsil eden sınıflar ve bu sınıfların oluşturduğu bir ağaç yapısı ile çalışır. Bu sayede, dilin ya da ifadenin farklı kombinasyonları kolayca yorumlanabilmektedir. Özellikle dil analizleri, hesap makineleri ve komut dosyası yorumlayıcıları gibi uygulamalarda bu desenin kullanımına sıkça rastlanır.