

























Published · 2 min read
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.
Strategy tasarım deseni şeması
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;
}
}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。