Adaptör

Mevcut bir sınıfı veya arayüz sınıfını, eldeki farklı bir arayüz sınıfına uygun hale getirerek tekrar kullanmak amacıyla uygulanır. Çoğu zaman işe yarayacağını düşündüğümüz mevcut bir sınıfı kendi sistemimizde tekrar kullanmak isteriz. Fakat mevcut sınıf, tam beklediğimiz gibi olmayabilir. Bu durumda araya bir tane adaptör yazarak, mevcut sınıfı kendi sistemimize uygun hale getirebiliriz. Böylece adapte edilen nesnede kod değişikliği olmadan benzer bir arayüzü destekler hale getiririz. Ayrıca adaptasyon işlemi sırasında, adapte edilen nesnenin desteklemediği özellikler de adaptör tarafından gerçekleştirilebilir.

Örnek :

Müşterilere satış yapan bir sistemde, Adres arayüzünden türemiş adres sınıfları vardır. Bu sistemde müşterilerin fatura adreslerinin de tutulacağı bir sınıfa ihtiyaç vardır. Bu amaçla içinde adres bilgilerinin de yer aldığı Müşteri sınıfının kullanılabileceği düşünülmektedir. Bunun için Müşteri sınıfını, Adres arayüzüne uyduracak bir tane adaptör sınıfın yazılması yeterlidir. Aşağıdaki örnekte bu adaptör MüşteriFaturaAdresiAdaptörü isimli sınıftır.

Örnek Sınıf Çizelgesi :

Örnek Java Kodu : ( Kodlar java 1.6.0.7 ile derlenip, çalıştırılmıştır. )

Adres.java :

public interface Adres {

String alAçıkAdres();

String alSemt();

String alŞehir();

String alÜlke();

}

İşAdresi.java :

public class İşAdresi implements Adres {


@Override

public String alAçıkAdres() {

return "Açık Adres";

}


@Override

public String alSemt() {

return "Semt";

}


@Override

public String alŞehir() {

return "Şehir";

}


@Override

public String alÜlke() {

return "Ülke";

}

}

Müşteri.java :

public class Müşteri {

private int numara;

private String açıklama;

private String açıkAdres;

private String semt;

private String şehir;

private String ülke;


public Müşteri( int numara, String açıklama, String açıkAdres,

String semt, String şehir, String ülke ) {

this.numara = numara;

this.açıklama = açıklama;

this.açıkAdres = açıkAdres;

this.semt = semt;

this.şehir = şehir;

this.ülke = ülke;

}


public String alNumara() {

return numara;

}


public String alAçıklama() {

return açıklama;

}


public String alAçıkAdres() {

return açıkAdres;

}


public String alSemt() {

return semt;

}


public String alŞehir() {

return şehir;

}


public String alÜlke() {

return ülke;

}

}

MüşteriFaturaAdresiAdaptörü.java :

public class MüşteriFaturaAdresiAdaptörü implements Adres {

private Müşteri müşteri;


public MüşteriFaturaAdresiAdaptörü( Müşteri müşteri ) {

this.müşteri = müşteri;

}


@Override

public String alAçıkAdres() {

return müşteri.alAçıkAdres();

}


@Override

public String alSemt() {

return müşteri.alSemt();

}


@Override

public String alŞehir() {

return müşteri.alŞehir();

}


@Override

public String alÜlke() {

return müşteri.alÜlke();

}

}

Satıcı.java :

public class Satıcı {

public static void main(String[] args) {

Müşteri müşteri = new Müşteri( 105, "açıklama", "adres",

"semt", "şehir", "ülke" );


MüşteriFaturaAdresiAdaptörü adaptör =

new MüşteriFaturaAdresiAdaptörü( müşteri );


// Artık "Müşteri" sınıfı da adaptör sayesinde bir

// "Adres" sınıfıdır.

Adres adres = adaptör;


// "Adres" sınıfının içeriğini yazdır.

System.out.println( "Adres:" + adres.alAçıkAdres() );

System.out.println( "Semt:" + adres.alSemt() );

System.out.println( "Şehir:" + adres.alŞehir() );

System.out.println( "Ülke:" + adres.alÜlke() );

}

}