Adapter
نمط المُكيّف Adapter
Adapter يحوّل واجهة كائن ما إلى واجهة أخرى يتوقعها الكود المستخدِم، ليعمل كائنان بواجهتين غير متوافقتين معًا دون تعديل أيٍّ منهما.
يغلّف Adapter الكائن غير المتوافق (Adaptee) ويعرض واجهة مطابقة لما يتوقعه العميل، ثم يترجم الاستدعاءات داخليًا إلى الشكل الذي يفهمه الكائن الأصلي. مثال شائع: مكتبة دفع خارجية بواجهة مختلفة عن الواجهة الموحّدة (PaymentGateway) التي يتوقعها بقية النظام.
الصياغة
class Adapter implements TargetInterface {
constructor(adaptee) { this.adaptee = adaptee; }
request() { return this.adaptee.specificRequest(); }
}📄 مثال
// واجهة قديمة غير متوافقة
class OldPrinter {
printOld(text) { console.log(`[Old] ${text}`); }
}
// الواجهة الموحدة التي يتوقعها الكود الحديث
class PrinterAdapter {
constructor(oldPrinter) { this.oldPrinter = oldPrinter; }
print(text) { this.oldPrinter.printOld(text); }
}
const printer = new PrinterAdapter(new OldPrinter());
printer.print("تقرير"); // [Old] تقريرأهم النقاط
| النقطة | الوظيفة |
|---|---|
| التصنيف | نمط هيكلي (Structural) |
| يحل مشكلة | ربط كائنين بواجهتين غير متوافقتين دون تعديل كود أي منهما |
| أشهر استخدام | تغليف مكتبة خارجية أو API قديم خلف واجهة موحّدة يستخدمها بقية النظام |
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار OOP الكامل بالعربي.