Tasarım Desenleri
Nesneye Dayalı Programlamada Sınıf İlişkileri Nasıl Olmalı?
Testçiler sizin düşmanınız değildir. Esas düşman yazılım hatalarıdır!
Yapısal Tasarım Desenleri

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.

/**
*
@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() );
 
}
}
Adres:Atatürk Mah. Gazi Sok. No:15
Semt:Sancaktepe
Şehir:İstanbul
Ülke:Türkiye

Yorumlar

Henüz bu sayfa için bir yorum yapılmamıştır.

Yorum Yaz, Düşüncelerini Paylaş

Not: Zorunlu alanlar yıldız (*) ile belirtilmiştir.

Kişisel Bilgiler

E-posta adresiniz kimse ile paylaşılmayacaktır. Gerekli olduğunda sizinle iletişim sağlamak için kullanılacaktır.

Yorum Alanı
Giriş Kontrol


Tüm java kodları "jdk1.7.0_09" ile derlenmiş ve çalıştırılmıştır.

Tüm hakları saklıdır. ©  "İlker KONAR" | İletişim: bilgi@tasarimdesenleri.com