Skip to content

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));
	}
}
public class Executer {
	Instruction instruction;
	public void setInstruction(Instruction instruction){
		this.instruction = instruction;
	}
	public int execute(int x,int y){
		return instruction.execute(x,y);
	}
}
public interface Instruction{
	public int execute(int x,int y);
}
public class Addition implements Instruction{
	public int execute(int x,int y){
		return x+y;
	}
}
public class Substraction implements Instruction{
	public int execute(int x,int y){
		return x-y;
	}
}
public class Multiplication implements Instruction{
	public int execute(int x,int y){
		return x*y;
	}
}
public class Division implements Instruction{
	public int execute(int x,int y){
		return x/y;
	}
}

Be First to Comment

Leave a Reply

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