Welcome to My Blog 👋

Java, Spring Framework, Microservices, Docker, Kubernetes, AWS and Others 🚀
Follow Me

Design Pattern - Adapter



  May 15, 2019    Labels:,,,,,,,, 

Adapter Design Pattern'ı adından da anlaşılacağı gibi iki uyumsuz nesnenin uyumlu bir şekilde çalışmasını sağlar ve aradaki uyumsuzluğu çözer.  Bu iki nesne farklı sistemlerin nesnesi de olabilir, aynı sistemdeki farklı çalışan iki nesne de olabilir. Örneğin elimizde bir model nesnesi olduğunu düşünelim. Bu model nesnesi kişilerin bilgilerini tuttuğu model olabilir. Bu kişileri bir liste halinde göstermek istersek listenin anlayacağı şekilde bu nesnedeki bilgileri düzenlememiz gerekir. Bu problemi adapter nesnesi çözer ve aldığı model sınıfını listenin anlayacağı şekilde adapte ederek uygun nesneyi oluşturur.

Uygulama
  • Adapter arayüzü ve bu arayüzü implement eden adapter sınıflarını tanımlarız. Bu adapter sınıfları iki sınıf arasındaki farklılıkları çözen sınıflardır. İhtiyacımız doğrultusunda istediğimiz kadar tanımlarız.
  • Adapter sınıfları içinde adapte edecekleri nesneleri barındırırlar.
  • Client sınıfları adapter arayüzü ile iki nesneyi adapte edebilirler.




import java.util.ArrayList;
import java.util.List;

class Insan {
    String ad;
    String soyad;
    
    public Insan(String ad, String soyad) {
        this.ad = ad;
        this.soyad = soyad;
    }
    
    public String getAd() {
        return ad;
    }
    
    public String getSoyad() {
        return soyad;
    }
}

class ListView {
    List<ListViewModel> listViewModelList;
    
    public ListView(List<ListViewModel> listViewModelList) {
        this.listViewModelList = listViewModelList;
    }
    
    public void goster() {
        for(ListViewModel model : listViewModelList) {
            System.out.println("Baslik : " + model.getBaslik());
            System.out.println("Aciklama : " + model.getAciklama());
        }
    }
}

class ListViewModel {
    String baslik;
    String aciklama;
    
    public ListViewModel(String baslik, String aciklama) {
        this.baslik = baslik;
        this.aciklama = aciklama;
    }
    
    public String getBaslik() {
        return baslik;
    }
    
    public String getAciklama() {
        return aciklama;
    }
}

interface Adapter {
    public void get();
}

class ListViewInsanAdapter implements Adapter {
    List<Insan> insanList;
    
    public ListViewInsanAdapter(List<Insan> insanList) {
        this.insanList = insanList;
    }
    
    public List<ListViewModel> get() {
        List<ListViewModel> listViewModelList = new ArrayList<>();
        for(Insan insan : insanList) {
            ListViewModel model = new ListViewModel(insan.getAd(), insan.getSoyad());
            listViewModelList.add(model);
        }
        return listViewModelList;
    }
}

public class Test {

     public static void main(String []args){
        Insan insan = new Insan("Berkay","Demirel");
        Insan insan2 = new Insan("Deneme","Insan");
        List<Insan> insanList = new ArrayList<>();
        insanList.add(insan);
        insanList.add(insan2);
        Adapter adapter = new ListViewInsanAdapter(insanList);
        ListView listView = new ListView(adapter.get());
        listView.goster();
     }
}

Baslik : Berkay
Aciklama : Demirel
Baslik : Deneme
Aciklama : Insan

No comments:

Post a Comment