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.
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
// 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
- Tasarım DeseniYazılım Mimarisi, s. 42Tasarım deseni, yazılım tasarımında sık görülen bir soruna kanıtlanmış, yeniden kullanılabilir çözümdür; hazır kod değil, genel bir şablon olarak anlatılır.
- Hexagonal ArchitectureYazılım Mimarisi, s. 18Hexagonal architecture, çekirdek iş mantığının dış dünyayla yalnızca portlar ve değiştirilebilir adaptörlerle konuştuğu bir yazılım yapılandırma yöntemidir.
- InterfaceProgramlamanın Temelleri, s. 26Interface, bir türün sağlamayı vaat ettiği metot ve özellik imzalarından oluşan adlandırılmış bir kümedir; bu üyelerin nasıl gerçekleştirildiğini söylemez.
- Gevşek BağlılıkYazılım Mimarisi, s. 16Gevşek bağlılık, bileşenlerin birbirine olabildiğince az bağımlı olduğu, böylece birinin diğerlerini bozmadan değişebildiği bir tasarım ilkesidir.
- Factory DeseniYazılım Mimarisi, s. 15Factory deseni, nesne oluşturmayı özel bir fonksiyona ya da sınıfa taşıyan ve çağıranların somut sınıfı hiç adlandırmadığı oluşturucu bir tasarım desenidir.
- Strategy DeseniYazılım Mimarisi, s. 41Strategy deseni, değiştirilebilir algoritmaları tek arayüzün arkasına koyup çalışma zamanında aralarında geçiş yapılmasını sağlayan davranışsal bir desendir.
- Decorator PatternYazılım Mimarisi, s. 9Decorator pattern, bir nesneyi aynı arayüze sahip başka bir nesneyle sararak orijinal kodu değiştirmeden ona loglama, önbellekleme gibi davranışlar ekler.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin