Adaptör ( Adapter ) Tasarım Deseni
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 Uygulama
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.
- UML Sınıf Çizelgesi
- Adres.java
- İşAdresi.java
- Müşteri.java
- MüşteriFaturaAdresiAdaptörü.java
- Satıcı.java
- Ekran Çıktısı

/**
* @author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/
package com.ilkerkonar.td.desen.ornekkodlar.adapter;
/**
* Adres.java
*
* Tarih bilgisi : May 23, 2014
*/
public interface Adres {
String alAçıkAdres();
String alSemt();
String alŞehir();
String alÜlke();
}
/**
* @author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/
package com.ilkerkonar.td.desen.ornekkodlar.adapter;
/**
* İşAdresi.java
*
* Tarih bilgisi : May 23, 2014
*/
public class İşAdresi implements Adres {
@Override
public String alAçıkAdres() {
return "Gül Mah. Osman Sok. No:15";
}
@Override
public String alSemt() {
return "Beşiktaş";
}
@Override
public String alŞehir() {
return "İstanbul";
}
@Override
public String alÜlke() {
return "Türkiye";
}
}
/**
* @author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/
package com.ilkerkonar.td.desen.ornekkodlar.adapter;
/**
* Müşteri.java
*
* Tarih bilgisi : May 23, 2014
*/
public class Müşteri {
private final String numara;
private final String açıklama;
private final String açıkAdres;
private final String semt;
private final String şehir;
private final String ülke;
public Müşteri( final String numara, final String açıklama, final String açıkAdres, final String semt,
final String şehir, final 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;
}
}
/**
* @author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/
package com.ilkerkonar.td.desen.ornekkodlar.adapter;
/**
* MüşteriFaturaAdresiAdaptörü.java
*
* Tarih bilgisi : May 23, 2014
*/
public class MüşteriFaturaAdresiAdaptörü implements Adres {
private final Müşteri müşteri;
public MüşteriFaturaAdresiAdaptörü( final 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();
}
}
/**
* @author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/
package com.ilkerkonar.td.desen.ornekkodlar.adapter;
/**
* Satıcı.java
*
* Tarih bilgisi : May 23, 2014
*/
public class Satıcı {
public static void main( final String[] args ) {
// Örnek bir Müşteri nesnesi yarat.
final Müşteri müşteri = new Müşteri( "105", "açıklama", "Atatürk Mah. Gazi Sok. No:15", "Sancaktepe",
"İstanbul", "Türkiye" );
// Müşteri sınıfının adaptörünü yarat.
final 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.
final 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() );
}
}
Semt:Sancaktepe
Şehir:İstanbul
Ülke:Türkiye
Yorumlar
Yorum Yaz, Düşüncelerini Paylaş