تخطَّ إلى المحتوى

Abstract Factory

نمط مصنع المصانع Abstract Factory

Abstract Factory يوفّر واجهة لإنشاء عائلات كاملة من الكائنات المترابطة، دون تحديد كلاساتها الملموسة في كود العميل.

بدل مصنع واحد ينتج نوع كائن واحد، Abstract Factory يجمع عدة دوال إنشاء تُنتج مجموعة كائنات متوافقة مع بعضها دائمًا. مثال كلاسيكي: مصنع واجهة مستخدم (UI) لكل نظام تشغيل، بحيث MacFactory تُنتج أزرار وقوائم بمظهر Mac، وWindowsFactory تُنتج أزرار وقوائم بمظهر Windows — بدون خلط عناصر من نظامين مختلفين بالخطأ.

الصياغة

interface GUIFactory { createButton(): Button; createCheckbox(): Checkbox; }

📄 مثال

class LightThemeFactory {
  createButton() { return { style: "light-button" }; }
  createCheckbox() { return { style: "light-checkbox" }; }
}

class DarkThemeFactory {
  createButton() { return { style: "dark-button" }; }
  createCheckbox() { return { style: "dark-checkbox" }; }
}

function renderUI(factory) {
  return [factory.createButton(), factory.createCheckbox()];
}

console.log(renderUI(new DarkThemeFactory()));
// [{ style: 'dark-button' }, { style: 'dark-checkbox' }] — عائلة متوافقة، بلا خلط

أهم النقاط

النقطةالوظيفة
التصنيفنمط إنشائي (Creational)
يحل مشكلةضمان أن الكائنات المُنشأة معًا متوافقة مع بعضها (نفس العائلة/الثيم)
التكلفةإضافة عائلة منتجات جديدة (مثل ثيم ثالث) تتطلب تعديل الواجهة وكل المصانع الموجودة

💡 نصائح عملية

  • استخدمه فقط لما يوجد فعلاً أكثر من عائلة منتجات متبادلة — عائلة واحدة لا تستحق هذا التعقيد

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار OOP الكامل بالعربي.