Mehmet Ethem SULAN :: Java Tasarım Şablonları :: Adapter Design Pattern(Adapter Tasarım Şablonu)

Bu şablon yardımıyla uygulamamızda birlikte çalışamayan sınıflar adapte edilerek birbiriyle çalışacak duruma getirilebilir.Bazen bir sınıfın kodu elimizde olamayacağı(.class sadece var elimizde) durumlarda bu şablon ile kendi sistemimize entegre edebilme imkanımız olur.Yanı kod elimizde değil ama biz kodu işimize yarayacak şekilde kullanabiliriz bu şablonla.Aslında kod elimizde olsa dahi bazen bazen değiştiremeyiz.Mesela bir metod birden fazla yerde kullanılıyordur sistemde.Onu değiştirmek yan etkilere sebep olabilir.Değiştirmek yerine istediğimiz şekle bu şablon ile bağdaştırabiliriz.Aşağıdaki örnekte claculatedField() yanı ingilizce isimli metodu Türkçe isim ile bağdaştırdım.alanHesapla() metoduna ingilizce olan metodu adapte ettim.

package www.ethemsulan.com;
public interface AlanHesaplaArayuzumuz {
//Ek bir bilgi interface içinde yazılan metodlarda
//abstract yazmazsak dahi arka planda abstracta çevirilir.
//public abstract int alanHesapla(int a,int b); arkaplanda bu şekle dönüştürülür.
//interface içindeki değer public ve abstract olarak otomatik dönüştürülür.
	int alanHesapla(int a,int b);	
}

Orj kod:http://www.ethemsulan.pastebin.com/HzMXRZnb

package www.ethemsulan.com;
public class Kare implements AlanHesaplaArayuzumuz{
	public int alanHesapla(int a, int b) {
		return a*b;
	}
}

orj kod:http://www.ethemsulan.pastebin.com/eZ2jHSsd

package www.ethemsulan.com;
public class DikUcgen implements AlanHesaplaArayuzumuz{
	public int alanHesapla(int a, int b) {
		return (a*b)/2;
	}
}

orj kod:http://www.ethemsulan.pastebin.com/myFuHDML

package www.ethemsulan.com;
public class Diktorgen {
//Bazen bir uygulamada metodlarımızın isimlerini ingilizceye 
//çevirmek zorunda kalabiliriz.Işlevi aynı ama metod isimleri
//değiştirmek için adapter yazabiliriz.
	public int calculatedField(int a,int b){
		return a*b;
	}
}

Orj kod:http://www.ethemsulan.pastebin.com/TmGGNe34

package www.ethemsulan.com;
public class AdapterDikdortgen implements AlanHesaplaArayuzumuz{
	private Diktorgen nesnem=new Diktorgen();
	private int bir;
	private int iki;
	public void setBir(int bir) {
		this.bir = bir;
	}
	public void setIki(int iki) {
		this.iki = iki;
	}

	public int getBir() {
		return bir;
	}
	public int getIki() {
		return iki;
	}
//calculatedField() metodunu alanHesapla() isimiyle
//çağırmak için adapter yanı bağdaştırıcı yazdık.
	public int alanHesapla(int a, int b) {
		setBir(a);
		setIki(b);
		return nesnem.calculatedField(a, b);
	}
}

Orj kod:http://www.ethemsulan.pastebin.com/XPsnWvBh

package www.ethemsulan.com;
public class TestAdapter {
	public static void main(String[] args) {
AlanHesaplaArayuzumuz obje=new Kare();
System.out.println("Kare alani: "+obje.alanHesapla(10, 10));
obje=new DikUcgen();
System.out.println("Dik ucgen alani: "+obje.alanHesapla(3, 4));
obje=new AdapterDikdortgen();
System.out.println("Dikdotrgen alani: "+obje.alanHesapla(20, 30));;
	}
}

Orj kod:http://www.ethemsulan.pastebin.com/ghgs6V1E

Write a Comment

Let me know what you think?