Adapter deseni nedir? Hangi durumda kullanırsınız?

Cevap

Adapter, uyumsuz bir arayüzü istemcinin beklediği arayüze çeviren yapısal (structural) bir desendir. Mevcut kodu veya üçüncü parti kütüphaneyi değiştirmeden sisteme takmanızı sağlar; tıpkı bir priz adaptörü gibi.

Tipik senaryo

Uygulamanız PaymentGateway arayüzüyle çalışıyor; yeni bir ödeme sağlayıcının SDK'sı ise farklı metot adları ve kuruş cinsinden tutar bekliyor.

from abc import ABC, abstractmethod

class PaymentGateway(ABC):              # Target: bizim beklediğimiz arayüz
    @abstractmethod
    def pay(self, amount_tl: float) -> str: ...

class AcmePaySDK:                       # Adaptee: değiştiremediğimiz kod
    def make_charge(self, cents: int, currency: str) -> dict:
        return {"id": "ch_123", "status": "ok"}

class AcmePayAdapter(PaymentGateway):   # Adapter
    def __init__(self, sdk: AcmePaySDK):
        self.sdk = sdk

    def pay(self, amount_tl: float) -> str:
        result = self.sdk.make_charge(int(round(amount_tl * 100)), "TRY")
        return result["id"]

def checkout(gateway: PaymentGateway):
    return gateway.pay(149.90)

print(checkout(AcmePayAdapter(AcmePaySDK())))  # ch_123

Ne zaman?

  • Legacy bir sınıfı yeni bir arayüze bağlarken.
  • Üçüncü parti kütüphaneleri kendi domain arayüzünüzün arkasına saklayıp sağlayıcı değişikliğini kolaylaştırmak için.
  • Testte gerçek SDK yerine sahte implementasyon kullanabilmek için.

Benzer desenlerle farkı

DesenAmaç
AdapterArayüzü değiştirir, davranış aynı kalır
DecoratorArayüz aynı kalır, davranış eklenir
FacadeKarmaşık bir alt sistemi tek ve basit bir arayüzle sunar
ProxyAynı arayüz, erişimi kontrol eder (lazy load, cache, yetki)
  1. Clean code nedir? Yaygın code smell'ler nelerdir?OrtaOOP & Tasarım DesenleriYazılım Müh.
  2. Dependency Injection nedir? IoC container ne işe yarar?ZorOOP & Tasarım DesenleriYazılım Müh.
  3. Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  4. Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?OrtaOOP & Tasarım DesenleriYazılım Müh.
  5. Factory deseni nedir? Ne zaman kullanılır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  6. Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?ZorOOP & Tasarım DesenleriYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle