Adaptör deseni
Adaptör deseni veya kalıbı (İngilizce: Adapter Pattern), yazılım mühendisliğinde, bir sınıfın arayüzünü istemcinin beklediği başka bir arayüze dönüştüren bir yazılım tasarım kalıbıdır. Böylece, uyumsuz arayüzlere sahip sınıflar birlikte çalışabilir hâle gelir.[1]
Genel bakış
[değiştir | kaynağı değiştir]Adaptör kalıbı, Gang of Four tarafından tanımlanan 23 temel tasarım kalıbından biridir ve yapısal kalıplar arasında sınıflandırılır.[1] Bu kalıp, istemcinin ihtiyaç duyduğu arayüzü uygulamayan bir sınıfın, bu arayüze uyum sağlayarak kullanılabilmesini mümkün kılar.
Bileşenler
[değiştir | kaynağı değiştir]Adaptör kalıbı şu temel bileşenlerden oluşur:[1]
- Hedef Arayüz (Target): İstemcinin beklediği arayüzü tanımlar.
- Adaptee: Uyum sağlanmak istenen mevcut sınıf veya arayüz.
- Adaptör (Adapter): Hedef arayüzü uygulayan ve adaptee’nin işlevselliğini bu arayüze uyarlayan sınıf.
- İstemci (Client): Hedef arayüzü kullanan kod parçası.
Uygulama
[değiştir | kaynağı değiştir]Adaptör kalıbı iki farklı yöntemle uygulanabilir:
Sınıf Adaptörü (Class Adapter)
[değiştir | kaynağı değiştir]Bu yaklaşımda, adaptör sınıfı hem hedef arayüzü uygular hem de adaptee sınıfından kalıtım alır. Bu yöntem, çoklu kalıtımı destekleyen dillerde mümkündür.
// Java örneği (sınıf adaptörü)
class Adaptör extends Adaptee implements HedefArayüz {
public void hedefMetot() {
adapteeMetot();
}
}
Nesne Adaptörü (Object Adapter)
[değiştir | kaynağı değiştir]Bu yaklaşımda, adaptör sınıfı bileşim yoluyla adaptee nesnesine başvurur. Java ve C# gibi tekli kalıtım destekleyen dillerde bu yöntem tercih edilir.
// Java örneği (nesne adaptörü)
class Adaptör implements HedefArayüz {
private Adaptee adaptee;
public Adaptör(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void hedefMetot() {
adaptee.adapteeMetot();
}
}
Adaptör deseni örneği
[değiştir | kaynağı değiştir]Adaptör kalıbı, gerçek dünyada priz adaptörlerine benzetilebilir. Örneğin, Avrupa tipi bir fişi Amerikan tipi prize uydurmak için fiziksel bir adaptör kullanılır. Benzer şekilde, yazılımda da farklı arayüzlere sahip bileşenleri birbirine uyarlamak için adaptör kullanılır.[1]
Avantajlar
[değiştir | kaynağı değiştir]- Mevcut sınıflar değiştirilmeden yeniden kullanılabilir.
- Arayüzler uyumlaştırılarak sistemler entegre edilebilir.
- Kodun esnekliği ve yeniden kullanılabilirliği artar.[1]
Dezavantajlar
[değiştir | kaynağı değiştir]- Fazladan bir soyutlama katmanı eklenmesi, kod karmaşıklığını artırabilir.
- Gereksiz kullanımı, sistem mimarisini karmaşıklaştırabilir.[1]
Kullanım senaryoları
[değiştir | kaynağı değiştir]- Var olan bir sınıfın istemcinin beklediği arayüzle uyumlu hâle getirilmesi gerekiyorsa.
- Üçüncü parti kütüphanelerin veya eski sistemlerin mevcut uygulamalara entegre edilmesi gerekiyorsa.
- Farklı veri formatları veya iletişim protokolleri arasında köprü kurmak gerekiyorsa.
İlgili Kalıplar
[değiştir | kaynağı değiştir]- Köprü deseni: Soyutlama ve uygulamanın ayrılmasını sağlar. Adaptör, mevcut sınıfları yeni bir arayüze uyarlar; köprü ise yeni soyutlamalar ve uygulamalar arasında ayrım yapar.
- Süsleyici deseni: Dinamik olarak yeni davranışlar ekler, ancak adaptasyon sağlamaz.
- Fasade deseni: Alt sistemlere daha basit bir arayüz sağlar.