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_123Ne 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ı
| Desen | Amaç |
|---|---|
| Adapter | Arayüzü değiştirir, davranış aynı kalır |
| Decorator | Arayüz aynı kalır, davranış eklenir |
| Facade | Karmaşık bir alt sistemi tek ve basit bir arayüzle sunar |
| Proxy | Aynı arayüz, erişimi kontrol eder (lazy load, cache, yetki) |
İlgili OOP & Tasarım Desenleri soruları
- Clean code nedir? Yaygın code smell'ler nelerdir?
- Dependency Injection nedir? IoC container ne işe yarar?
- Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?
- Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?
- Factory deseni nedir? Ne zaman kullanılır?
- Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.