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 Factory | Factory Method ينتج نوعًا واحدًا من الكائنات؛ Abstract Factory ينتج عائلة كاملة مترابطة |
💡 نصائح عملية
- لو دالة الإنشاء لديك تحتوي فقط سلسلة if/else على نوع، هذا 'Simple Factory' — خطوة أبسط قبل الحاجة الفعلية لفئات فرعية
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار OOP الكامل بالعربي.