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

Factory Method

نمط دالة المصنع Factory Method

Factory Method يوفّر دالة لإنشاء الكائنات بدل استدعاء new مباشرة، بحيث تقرر الفئات الفرعية نوع الكائن الفعلي المُنشأ.

بدل ما الكود المستخدِم يعرف الكلاس الملموس (Concrete Class) ويستدعيه مباشرة بـ new، يستدعي دالة مصنع (مثل createShape()) تُعيد كائنًا يطابق واجهة معروفة. الكلاس الأب يعرّف الدالة، والفئات الفرعية تقرر أي كلاس ملموس تُنشئ.

هذا يفصل كود إنشاء الكائنات عن كود استخدامها — فإضافة نوع جديد لا يتطلب تعديل الكود القائم، فقط فئة فرعية جديدة (Open/Closed Principle).

الصياغة

abstract class Creator { createProduct(): Product; }
class ConcreteCreator extends Creator { createProduct() { return new ConcreteProduct(); } }

📄 مثال

class NotificationFactory {
  createNotification(type) {
    if (type === "email") return new EmailNotification();
    if (type === "sms") return new SmsNotification();
    throw new Error("نوع غير معروف");
  }
}

class EmailNotification { send(msg) { console.log(`Email: ${msg}`); } }
class SmsNotification { send(msg) { console.log(`SMS: ${msg}`); } }

const factory = new NotificationFactory();
const notif = factory.createNotification("email");
notif.send("مرحبا"); // Email: مرحبا

أهم النقاط

النقطةالوظيفة
التصنيفنمط إنشائي (Creational)
يحل مشكلةفصل كود إنشاء الكائنات عن كود استخدامها
الفرق عن Abstract FactoryFactory Method ينتج نوعًا واحدًا من الكائنات؛ Abstract Factory ينتج عائلة كاملة مترابطة

💡 نصائح عملية

  • لو دالة الإنشاء لديك تحتوي فقط سلسلة if/else على نوع، هذا 'Simple Factory' — خطوة أبسط قبل الحاجة الفعلية لفئات فرعية

خصائص ذات صلة

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