شرح Factory Design Pattern بالتفصيل مع مثال توضيحي ومعرفة العيوب والمميزات
نمط المصنع هو واحد من أكثر أنماط التصميم شيوعًا في البرمجة الموجهة للكائنات (OOP)؛ وهو ينتمي إلى النمط الإنشائي ويوفر آلية لإنشاء الكائنات بطريقة مبسطة ومرنة، دون الحاجة إلى تحديد الفئة الفعلية للكائن في كل مرة. يهدف إلى توفير آلية لإنشاء الكائنات بطريقة مبسطة ومرنة دون الحاجة إلى تحديد الفئة الفعلية للكائن في كل مرة. تشرح هذه المقالة نمط المصنع بالتفصيل وتوضح الاختلافات من خلال مقارنة تطبيقه على عملية دفع إلكتروني باستخدام جافا مع رمز لا يستخدم هذا النمط.
ما هو نمط المصنع؟
سيناريو مثال. في عملية دفع عبر الإنترنت، قد تحتاج إلى معالجة المدفوعات عبر طرق دفع متعددة، مثل بطاقة الائتمان، PayPal، الدفع نقدًا، إلخ. […]
كود جافا بدون استخدام Factory Pattern لاختيار وسيلة دفع
class PaymentProcessor {
public void processPayment(String paymentType) {
if (paymentType.equals("CreditCard")) {
System.out.println("Processing payment through Credit Card...");
} else if (paymentType.equals("PayPal")) {
System.out.println("Processing payment through PayPal...");
} else if (paymentType.equals("Cash")) {
System.out.println("Processing cash payment...");
} else {
System.out.println("Unknown payment method.");
}
}
public static void main(String[] args) {
PaymentProcessor processor = new PaymentProcessor();
processor.processPayment("CreditCard");
}
}كود جافا باستخدام Factory Pattern لتنفيذ عملية الدفع
interface Payment {
void processPayment();
}
class CreditCardPayment implements Payment {
@Override
public void processPayment() {
System.out.println("Processing payment through Credit Card...");
}
}
class PayPalPayment implements Payment {
@Override
public void processPayment() {
System.out.println("Processing payment through PayPal...");
}
}
class CashPayment implements Payment {
@Override
public void processPayment() {
System.out.println("Processing cash payment...");
}
}
class PaymentFactory {
public static Payment createPayment(String paymentType) {
switch (paymentType) {
case "CreditCard":
return new CreditCardPayment();
case "PayPal":
return new PayPalPayment();
case "Cash":
return new CashPayment();
default:
throw new IllegalArgumentException("Unknown payment method: " + paymentType);
}
}
}
public class Main {
public static void main(String[] args) {
Payment payment = PaymentFactory.createPayment("CreditCard");
payment.processPayment();
}
}الاختلافات بين النهجين
استخدام نمط المصنع:
مميزات وعيوب Factory Pattern
العيوب. التعقيد المبدئي: في التطبيقات الصغيرة أو البسيطة، قد يبدو هذا النمط معقدًا بشكل غير ضروري. الاعتماد على المصانع: يمكن أن يؤدي الاعتماد الأكبر على المصانع إلى زيادة عدد الفئات المخصصة، مما قد يكون مربكًا في بعض الحالات.
نمط المصنع هو نمط تصميم مفيد للغاية عند الحاجة إلى إنشاء كائنات متعددة بناءً على شروط محددة. يمكن استخدام نمط المصنع لجعل الشيفرة البرمجية أكثر مرونة وقابلية للتطوير والصيانة مع الحفاظ على بنية بسيطة ومنظمة. على الرغم من التعقيد الأولي الذي قد يضيفه هذا النمط، إلا أنه خيار ممتاز عند التعامل مع المشاريع الكبيرة أو المعقدة التي تتطلب مرونة كبيرة في توليد الكائنات. نمط المصنع سهل التنفيذ، ويجعل الشيفرة البرمجية أكثر احترافية ويحسن تجربة البرمجة، خاصة عندما يتعلق الأمر بتوسيع نطاق المشاريع الكبيرة وصيانتها.
مثال بسيط مختلف : تخيل لديك متجر قهوه وتريد عن طريق ال id يتم ارفاق جميع التفاصيل للشخص المسؤول عن اعداد القهوه الخاصه بك , سوف تقوم اولا بعمل class من نوع abstract وبه المواصفات مثل السكر ونوع القهوه والسكر وتقوم بعمل class لكل نوع ويرث من ال abstract وبه التفاصيل
وتقوم بعمل كلاس يحتوي على الfactory وفي الكود الرئيسي تقوم بعمل switch استدعاء لل factory وعن طريق ال id يتم عرض تفاصيل بيانات الطلب .
الخلاصه يتم استخدام هذا النوع عندما يكون لديك مجموعة من الاختيارات وهو شبيه جدا بمبدأ open close في solid ليقبل الزيادة ولا يقبل النقصان .



