Strategy

Bu yazımda size Strategy adındaki nesneye dayalı yazılım şablonunu (Object-Oriented Design Pattern) anlatacağım. Bu şablonun genel amacı yapılacak iş için alternatifler oluşturup, bu alternatifleride çalışma zamanında(runtime) seçebilme kabiliyetini sağlamaktır. Buna örnek verecek olursak, bir sıralama algoritması yazmak istiyoruz. Ama  bize verilen nesnelerin sayısı 30 dan küçük olduğunda insertion sort, büyük olduğunda da quick sort kullanacağız. İşte bu durumda bize, bu esnekliği sağlayan bir tasarım gerekli ki, stratejimizi çalışma zamanında değiştirerek sağlayabiliyoruz. Aşağıda verdiğimiz kodu anlatacak olursak. Şimdi bizim toplama, çıkarma, çarpma ve bölme işlemlerimiz var. Fakat biz hangisini kullanacağımıza çalışma zamanında karar vereceğiz, bu durumda aşağıda uyguladığımız gibi stratejimizi oluşturuyoruz. Eğer işlemi değiştirmek istiyorsak setInstruction methodunu çağırıyoruz.  Böylece sadece işlem yapan nesneyi değiştirerek, işlemimizi değiştirebiliyoruz.

public class Calculator {

    public static void main(String[] args) {
        Executer ex = new Executer();

        ex.setInstruction(new Addition());
        System.out.println(ex.execute(3, 4));

        ex.setInstruction(new Substraction());
        System.out.println(ex.execute(3, 4));

        ex.setInstruction(new Multiplication());
        System.out.println(ex.execute(3, 4));

        ex.setInstruction(new Division());
        System.out.println(ex.execute(3, 4));
    }
}

class Executer {
    private Instruction instruction;

    public void setInstruction(Instruction instruction) {
        this.instruction = instruction;
    }

    public int execute(int x, int y) {
        return instruction.execute(x, y);
    }
}

interface Instruction {
    int execute(int x, int y);
}

class Addition implements Instruction {
    @Override
    public int execute(int x, int y) {
        return x + y;
    }
}

class Substraction implements Instruction {
    @Override
    public int execute(int x, int y) {
        return x - y;
    }
}

class Multiplication implements Instruction {
    @Override
    public int execute(int x, int y) {
        return x * y;
    }
}

class Division implements Instruction {
    @Override
    public int execute(int x, int y) {
        return x / y;
    }
}

Stay updated

Receive insights on tech, leadership, and growth.

Subscribe if you want to read posts like this

No spam. One email a month.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.