STRUCTURAL PATTERN

Adapter Pattern

نمط المحول

يعني إيه؟ زي محول الشاحن - بيخلي فيشة أوروبية تشتغل في بريزة مصرية! 🔌
بيوصل بين interfaces مختلفة عشان يشتغلوا مع بعض! ⚡

THE CONCEPT

مثال الشاحن 🔌

Adapter = وسيط بين interfaces مختلفة! 📱 Client USB-C 🔌 Adapter USB-C → Lightning request() → specificRequest() 🍎 Adaptee Lightning request() specificRequest() ❌ من غير Adapter 📱 USB-C مش هيدخل في 🍎 Lightning! ✅ مع Adapter 📱 → 🔌 → 🍎 كل حاجة بتشتغل!

📱 Client

الـ Code بتاعك اللي بيستخدم interface معين - مش عايز يتغير!

🔌 Adapter

الوسيط اللي بـيحول من interface لـ interface تاني - بيعمل translation!

🍎 Adaptee

الـ Class القديم أو الـ Library اللي عايزين نستخدمها بس interface-ها مختلف!

الكود 💻

Adapter.js
// 🍎 Adaptee - الـ interface القديم/المختلف
class LightningCharger {
  chargeLightning() {
    return "⚡ Charging via Lightning port...";
  }
}

// 📱 Target Interface - اللي الـ Client عايزه
class USBCCharger {
  chargeUSBC() {
    throw "Must implement chargeUSBC()";
  }
}

// 🔌 Adapter - الوسيط السحري!
class LightningToUSBCAdapter extends USBCCharger {
  constructor(lightningCharger) {
    super();
    this.adaptee = lightningCharger; // 👈 Composition!
  }
  
  // بيحول من USB-C لـ Lightning
  chargeUSBC() {
    // Translate the request!
    return this.adaptee.chargeLightning() + " (via USB-C adapter)";
  }
}
Usage.js
// 🎯 Client Code
function chargeDevice(charger) {
  // Client expects USB-C interface
  console.log(charger.chargeUSBC());
}

// ❌ Cannot use Lightning directly!
const oldCharger = new LightningCharger();
// chargeDevice(oldCharger); // Error! No chargeUSBC()

// ✅ Use Adapter!
const adapter = new LightningToUSBCAdapter(oldCharger);
chargeDevice(adapter);
// ⚡ Charging via Lightning port... (via USB-C adapter)

// 🔥 الـ Client مش محتاج يتغير!
// الـ Adapter بيعمل كل الشغل!

جرب! 🎮

📱 🍎

اختار طريقة التوصيل!

// جرب التوصيل!

امتى نستخدمه؟ 🤔

📚

3rd Party Libraries

Library قديمة interface-ها مختلف عن اللي بنستخدمه!

🔄

Legacy Code

كود قديم عايزين نستخدمه مع كود جديد!

🔌

API Integration

APIs مختلفة عايزين نوحد interface-ها!

🧪

Testing

Mock objects تتوافق مع interface معين!

Proxy Bridge