Sobes.tech
Junior

Adaptör deseni nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Adapter Deseni (Adapter Pattern), uyumsuz arayüzlere sahip sınıfların birlikte çalışmasını sağlayan yapısal tasarım desenidir. Bu desen, bir sınıfın arayüzünü, müşterinin beklediği başka bir arayüze dönüştüren bir sarmalayıcı gibi davranır.

Uygulamalar:

  • Uyumsuz arayüzlere sahip üçüncü taraf kütüphanelerin entegrasyonu.
  • Var olan sınıfların, değiştirmeden yeni sistemlerde kullanılması.
  • Bağımsız olarak geliştirilmiş sınıflar arasında etkileşimi sağlama.

Uygulama örneği (nesne adaptörü):

Varsayalım ki, LegacyService adında ve oldRequest() metoduna sahip bir sınıf var:

class LegacyService {
    public void oldRequest() {
        // eski kod
    }
}

Ve newRequest() metoduna sahip yeni bir arayüz NewService:

interface NewService {
    void newRequest();
}

ServiceAdapter adaptörü, NewService'i uygular ve LegacyService'e referans tutar:

class ServiceAdapter implements NewService {
    private LegacyService legacyService;

    public ServiceAdapter(LegacyService legacyService) {
        this.legacyService = legacyService;
    }

    @Override
    public void newRequest() {
        // Yeni metod çağrısını eski metoda dönüştürme
        legacyService.oldRequest();
    }
}

İstemci, LegacyService'i NewService arayüzü üzerinden kullanabilir:

NewService service = new ServiceAdapter(new LegacyService());
service.newRequest(); // oldRequest() çağırır

Ayrıca, sınıf adaptörü adı verilen bir varyant da vardır; bu, çoklu kalıtımı (dil destekliyorsa) veya uyarlanacak sınıftan kalıtım ve hedef arayüzün uygulanmasını kullanır. Java'da çoklu kalıtım olmadığından, bu, uyarlanabilir sınıftan kalıtım ve adaptör arayüzünün uygulanmasıyla gerçekleştirilir, ancak bu yaklaşım daha az esnektir. Nesne adaptörü, alt sınıfları uyarlama ve katı bağımlılığı önleme imkanı sunduğu için tercih edilir.

Avantajlar:

  • Uyumsuz sınıfların yeniden kullanılmasına izin verir.
  • Arayüz dönüşüm detaylarını kapsüller.
  • Sistemin esnekliğini artırır.

Dezavantajlar:

  • Yeni bir sınıf ekleyerek karmaşıklığı artırabilir.
  • Ekstra soyutlama seviyesi nedeniyle performans biraz düşebilir.