Ana içeriğe geç

Adapter Deseni

İngilizcesi
Adapter Pattern
Türkçe karşılığı
adaptör deseni
Okunuşu
ıdeptır petırn

Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/adapter-pattern

Kısaca

Adapter deseni, mevcut bir sınıfı yeni bir arayüzle sararak bir arayüz bekleyen kodun uyumsuz bir arayüzü kullanabilmesini sağlayan yapısal tasarım desenidir.

Adapter deseni nedir?

Adapter deseni, arayüzleri uyuşmayan iki kod parçasını birbirine bağlar. Kodunuz hedef (target) denen bir arayüz bekler ama kullanmak istediğiniz sınıfın, adaptee denen, farklı metot adları, parametreleri ya da veri biçimleri vardır. Adapter, hedef arayüzü uygulayan ve her çağrıyı adaptee'nin anlayacağı biçime çeviren küçük bir sınıftır; böylece iki taraftan hiçbirinin değişmesi gerekmez.

Çoğu adapter kompozisyon kullanır: adapter, adaptee'ye bir referans tutar ve çevrilmiş çağrıları ona iletir; buna object adapter denir. Çoklu kalıtım olan dillerde bir class adapter, bunun yerine iki taraftan da kalıtım alabilir. Çeviri; metotları yeniden adlandırmak, dolarları sente gibi birimleri dönüştürmek, XML'den JSON'a veri yeniden şekillendirmek veya callback'leri promise'lere çevirmek anlamına gelebilir.

Günlük benzetme, seyahat fiş adaptörüdür: şarj aletinizin ABD fişi vardır, duvarda ise Avrupa prizi bulunur ve adaptör ikisini de yeniden kablolamadan birlikte çalıştırır. Yazılımda adapter'lar üçüncü taraf kütüphaneleri ve SDK'ları sarmak, eski kodu entegre etmek, tek bir arayüzün arkasında birkaç sağlayıcıyı desteklemek ve hexagonal architecture'da uygulamanın portlarını veritabanlarına, API'lere ve kullanıcı arayüzlerine bağlamak için kullanılır.

Adapter, başka nesneleri saran decorator, facade ve proxy desenleriyle sıklıkla karıştırılır. Adapter uyumlu olması için bir arayüzü değiştirir, decorator aynı arayüzü korur ve davranış ekler, facade tüm bir alt sistem üzerinde yeni ve daha basit bir arayüz sunar, proxy ise aynı arayüzü korurken örneğin önbellekleme ya da tembel yükleme (lazy loading) ekleyerek erişimi denetler. Belirleyici soru, sarmalayıcının işinin çeviri mi, ek davranış mı, sadeleştirme mi yoksa denetim mi olduğudur.

Önemli noktalar

  • Adapter, bir arayüzü istemci kodunun beklediği başka bir arayüze çevirir.
  • Uyumsuz sınıfların, hiçbirini değiştirmeden birlikte çalışmasını sağlar.
  • Object adapter kompozisyon kullanır; class adapter kalıtım kullanır.
  • Decorator'lar davranış ekler, facade'ler sadeleştirir, proxy'ler erişimi denetler; adapter'lar çevirir.
  • Hexagonal architecture, çekirdeği dış sistemlere bağlamak için adapter'lar kullanır.

Örnek

Üçüncü taraf bir SDK'yı uygulamanın kendi arayüzüne uyarlamaktypescript
// The interface our app expects: amounts in dollars
interface PaymentGateway {
  pay(amountDollars: number, email: string): Promise<void>;
}

// Adapter: makes a third-party SDK with a different interface fit ours
class LegacyPayAdapter implements PaymentGateway {
  constructor(private sdk: { createCharge(opts: { cents: number; customer: string }): Promise<void> }) {}

  pay(amountDollars: number, email: string) {
    // Translate units and parameter names for the SDK
    return this.sdk.createCharge({ cents: Math.round(amountDollars * 100), customer: email });
  }
}

Sık sorulan sorular

Adapter ile facade desenleri arasındaki fark nedir?

Adapter, genellikle tek bir sınıfı sararak mevcut bir arayüzü istemcilerin zaten beklediği arayüze uydurur. Facade ise karmaşık bir alt sistemi kullanmayı kolaylaştırmak için bir sınıf grubunun üzerinde yeni ve daha basit bir arayüz oluşturur.

Adapter ile decorator desenleri arasındaki fark nedir?

Adapter, uyumsuz kodun birlikte çalışabilmesi için arayüzü değiştirir. Decorator ise tam olarak aynı arayüzü korur ve günlükleme ya da önbellekleme gibi davranış eklemek için bir nesneyi sarar.

Adapter deseni hexagonal architecture ile nasıl ilişkilidir?

Ports and adapters olarak da adlandırılan hexagonal architecture aynı fikri bütün bir uygulama düzeyinde uygular. Çekirdek portları arayüz olarak tanımlar; adapter'lar ise bu portlar ile SQL veritabanı veya REST API gibi belirli teknolojiler arasında çeviri yapar.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar