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 الكامل بالعربي.