"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > نمط تصميم المصنع

نمط تصميم المصنع

تم النشر بتاريخ 2024-07-30
تصفح:620

Factory Design Pattern

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

ما هو المصنع؟

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

فوائد

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

تنفيذ مصنع

دعونا نستخدم مثالا يوميا لتوضيح نمط المصنع: نظام لطلب الطعام، حيث يمكن إنشاء بعض أنواع الوجبات المختلفة (البيتزا والسلطة).

1- إنشاء الواجهة

أولاً، نحتاج إلى تحديد واجهة سيتم تنفيذها بواسطة جميع "الفئات المحددة" من الوجبات.

package main

type Food interface {
    Prepare()
}

2 - إنشاء ENUM وتنفيذ الواجهة

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

package main

type FoodType int

const (
    PizzaType FoodType = iota
    SaladType
)

type Food interface {
    Prepare()
}

والآن دعونا ننفذ واجهة الطعام. في المثال، سنعرض فقط رسالة، وفي الحياة الواقعية، هذا هو المكان الذي سيتم فيه إنشاء الكائن الذي نعمل عليه

package main

type FoodType int

const (
    PizzaType FoodType = iota
    SaladType
)

type Food interface {
    Prepare()
}

type Pizza struct{}

func (p Pizza) Prepare() {
    fmt.Println("Preparing a Pizza...")
}

type Salad struct{}

func (s Salad) Prepare() {
    fmt.Println("Preparing a Salad...")
}

3- إنشاء المصنع

الآن، لنقم بإنشاء المصنع الذي سيقرر أي فئة محددة سيتم إنشاء مثيل لها بناءً على التعداد الذي تلقته كمعلمة.

package main

type FoodFactory struct{}

func (f FoodFactory) CreateFood(ft FoodType) Food {
    switch ft {
    case PizzaType:
        return &Pizza{}
    case SaladType:
        return &Salad{}
    default:
        return nil
    }
}

4- استخدام المصنع

أخيرًا، سوف نستخدم المصنع لتصنيع طعامنا.

package main

func main() {
    kitchen := FoodFactory{}

    pizza := kitchen.CreateFood(PizzaType)
    if pizza != nil {
        pizza.Prepare()
    }

    salad := kitchen.CreateFood(SaladType)
    if salad != nil {
        salad.Prepare()
    }
}

ستكون هذه النتيجة بعد تشغيل تطبيقنا:

Preparing a Pizza...
Preparing a Salad...

ملخص ما فعلناه

  1. واجهة الطعام: تحدد العقد الذي يجب أن تتبعه جميع الوجبات الملموسة، مع التأكد من تنفيذها جميعًا لطريقة التحضير.
  2. Enum FoodType: يستخدم الثوابت المكتوبة لتمثيل أنواع مختلفة من الطعام، مما يزيد من إمكانية قراءة التعليمات البرمجية والأمان.
  3. الفصول الملموسة (البيتزا والسلطة): تنفيذ واجهة الطعام وتوفير تطبيقات خاصة بهم لطريقة التحضير.
  4. FoodFactory: يحتوي على منطق إنشاء الكائن. تحدد طريقة CreateFood الفئة المحددة التي سيتم إنشاء مثيل لها بناءً على تعداد FoodType.
  5. الطريقة الرئيسية: توضح استخدام المصنع لإنشاء كائنات مختلفة واستدعاء أساليبها، مما يوضح المرونة والفصل الذي يوفره نمط المصنع.

خاتمة

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

بيان الافراج تم نشر هذه المقالة على: https://dev.to/rflpazini/factory-design-pattern-4e9n?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3