شارك المقالة
يُستخدم نمط المصنع عند الحاجة إلى إنشاء كائنات دون تحديد الفئات التي سيتم استخدامها بدقة. بدلاً من ذلك، يتم استخدام المصنع لتوليد الكائنات المناسبة بناءً على المدخلات والشروط. يسمح هذا النمط بإنشاء الكائنات ديناميكيًا، مما يلغي الحاجة إلى التعامل مع تفاصيل الإنشاء مباشرةً في الشيفرة البرمجية الرئيسية.

شرح Factory Design Pattern بالتفصيل مع مثال توضيحي ومعرفة العيوب والمميزات

شرح 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();
    }
}

الاختلافات بين النهجين

لا يوجد نمط مصنع: أكثر تعقيدًا: تتطلب إضافة طريقة دفع جديدة إضافة المزيد من الشروط داخل طريقة المعالجة الرئيسية. انتهاك مبادئ OCP: الكود غير متوافق مع OCP حيث يجب تعديله في كل مرة يتم فيها إضافة طريقة دفع جديدة. ترابطات عالية: يرتبط PaymentProcessor بشكل مباشر مع كل طريقة دفع، مما يجعل الكود أكثر تعقيدًا.

استخدام نمط المصنع:

تبسيط الكود: يتم فصل مسؤولية إنشاء الكائنات إلى ”مصانع“ خاصة، مما يقلل من تعقيد الكود الرئيسي. سهولة التوسعة: لإضافة طريقة دفع جديدة، ما عليك سوى إنشاء فئة جديدة وتنفيذ واجهة الدفع دون تغيير التعليمات البرمجية الحالية. الالتزام بمبادئ OCP: الكود مغلق للتعديلات ومفتوح للإضافات. ما عليك سوى إضافة فئة جديدة دون تعديل الكود الرئيسي.

مميزات وعيوب Factory Pattern

المزايا. فصل العلاقات: فصل إنشاء الكائنات عن بقية الشيفرة البرمجية يجعل من السهل صيانتها وتوسيعها. المرونة: يمكن إضافة فئات جديدة بسهولة دون تغيير الشيفرة البرمجية الأساسية. إعادة الاستخدام: يمكن استخدام المصانع لإنشاء أنواع مختلفة من الكائنات بناءً على شروط الإدخال. التوافق مع مبادئ SOLID: النمط متوافق بشكل خاص مع مبادئ OCP.

العيوب. التعقيد المبدئي: في التطبيقات الصغيرة أو البسيطة، قد يبدو هذا النمط معقدًا بشكل غير ضروري. الاعتماد على المصانع: يمكن أن يؤدي الاعتماد الأكبر على المصانع إلى زيادة عدد الفئات المخصصة، مما قد يكون مربكًا في بعض الحالات.
نمط المصنع هو نمط تصميم مفيد للغاية عند الحاجة إلى إنشاء كائنات متعددة بناءً على شروط محددة. يمكن استخدام نمط المصنع لجعل الشيفرة البرمجية أكثر مرونة وقابلية للتطوير والصيانة مع الحفاظ على بنية بسيطة ومنظمة. على الرغم من التعقيد الأولي الذي قد يضيفه هذا النمط، إلا أنه خيار ممتاز عند التعامل مع المشاريع الكبيرة أو المعقدة التي تتطلب مرونة كبيرة في توليد الكائنات. نمط المصنع سهل التنفيذ، ويجعل الشيفرة البرمجية أكثر احترافية ويحسن تجربة البرمجة، خاصة عندما يتعلق الأمر بتوسيع نطاق المشاريع الكبيرة وصيانتها.
مثال بسيط مختلف : تخيل لديك متجر قهوه وتريد عن طريق ال id يتم ارفاق جميع التفاصيل للشخص المسؤول عن اعداد القهوه الخاصه بك , سوف تقوم اولا بعمل class من نوع abstract وبه المواصفات مثل السكر ونوع القهوه والسكر وتقوم بعمل class لكل نوع ويرث من ال abstract وبه التفاصيل
وتقوم بعمل كلاس يحتوي على الfactory وفي الكود الرئيسي تقوم بعمل switch استدعاء لل factory وعن طريق ال id يتم عرض تفاصيل بيانات الطلب .
الخلاصه يتم استخدام هذا النوع عندما يكون لديك مجموعة من الاختيارات وهو شبيه جدا بمبدأ open close في solid ليقبل الزيادة ولا يقبل النقصان .
شاهد أيضًا
مقالات ذات صلة
كيفية انشاء صفحة لتحديث بيانات المستخدم داخل برنامج الاندرويد ستوديو #5

كما اخبرناكم سابقا اننا سوف نقوم بإنشاء صفحة لتحديث بيانات المستخدم داخل اندرويد ستوديو بحيث…

استخراج البيانات الشخصية بسهولة من الرقم القومي المصري باستخدام Flutter

استخراج البيانات الشخصية بسهولة من الرقم القومي المصري باستخدام Flutterفي عالم تطبيقات Flutter، أحد أكبر…

كيفية اضافة صور 3D الى تطبيقك في فلاتر | How to Add 3d Images in Flutter project

كيفية اضافة صور 3D الى تطبيقك في فلاتر | How to Add 3d Images in…

🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع