يعني إيه؟
زي محول الشاحن - بيخلي فيشة أوروبية تشتغل في بريزة مصرية! 🔌
بيوصل بين interfaces مختلفة عشان يشتغلوا مع بعض! ⚡
الـ Code بتاعك اللي بيستخدم interface معين - مش عايز يتغير!
الوسيط اللي بـيحول من interface لـ interface تاني - بيعمل translation!
الـ Class القديم أو الـ Library اللي عايزين نستخدمها بس interface-ها مختلف!
// 🍎 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)";
}
}
// 🎯 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 بيعمل كل الشغل!
اختار طريقة التوصيل!
Library قديمة interface-ها مختلف عن اللي بنستخدمه!
كود قديم عايزين نستخدمه مع كود جديد!
APIs مختلفة عايزين نوحد interface-ها!
Mock objects تتوافق مع interface معين!