Interpreter Pattern Nedir? Nasıl Kullanılır?

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.

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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir