يهدف نمط الباني The Builder في التصميم البرمجي إلى فصل عمليّة بناء الكائنات المعقّدة عن طريقة عرضها، بحيث يُمكن إنشاء طرق عرض عدّة بنفس عمليّة البناء. كما يُستخدَم هذا النمط في التعامل مع طريقة عرض معقّدة لتحويلها إلى واحدة من بين طرق عرض أقلّ تعقيدا.
عرض المشكل
يتطلب تطبيق ما إنشاء عناصر من تجميع معقد. تتوافر مواصفات هذا التجمع في ذاكرة تخزين ثانوية (خارجية)، ونحتاج لبناء عرض واحد – من بين عدّة عروض ممكنة - في ذاكرة التخزين الأساسية.
المناقشة
تُفصَل خوارزمية التفسير (أي القراءة والتحليل) في آليّة التخزين المُستدام (كملفات RTF) عن خوارزمية بناء وعرض أحد المنتجات المستهدفة (مثل: ASCII، TeX والمربعات الجانبية “ودجة” Widgets). ينصب التركيز/التمييز على إنشاء تجميعات معقدة.
يستدعي الصنف القائد Director
خدمات الباني أثناء تفسير التنسيق الخارجي. ينشئ الباني جزءًا من الكائن المعقد في كلّ مرة يُستدعى فيها، كما يُحافظ على جميع الحالات الوسيطة. عندما يكتمل المنتج، يحصل العميل (وهو كائن آخر من التطبيق يحتاج الوظيفة المصمَّمة وفق نمط الباني) على النتيجة من “الباني”.
يؤمّن نمط الباني تحكما أفضل بعملية الإنشاء. وعلى عكس أنماط التصميم التي تنشئ المنتجات بخطوة واحدة، يُنشئ النمط الباني المنتج خطوة بخطوة تحت إشراف القائد.
مثال
يفصل نمط الباني عملية بناء الكائن المعقد عن عملية عرضه بحيث يمكن لعملية البناء نفسها أن تنشئ عروضا مختلفة.
يستخدم هذا النمط في مطاعم الوجبات السريعة لتحضير وجبات الأطفال. حيث تتكون وجبات الأطفال عادة من عنصر رئيسي (شطيرة هامبرغ) وعنصر جانبي (بطاطا مقلية) ومشروب ولعبة. لاحظ هنا إمكانية وجود اختلاف في محتوى وجبة الأطفال، لكن عملية بناء الوجبة هي نفسها، سواء طلب الزبون شطيرة هامبرغر أو هامبرغر بالجبنة أو دجاجًا فإن العملية هي نفسها. حيث يقوم الموظف المتواجد على النضد بتوجيه طاقم العمل لتجميع عنصر رئيسي وعنصر جانبي ولعبة ومن ثم وضع هذه العناصر في كيس، بينما يوضع المشروب في كأس ويبقى خارج الكيس. تُستخدَم العملية نفسها في المطاعم المنافسة.
كيف يُطبَّق نمط التصميم “الباني”
يجب أولا التأكّد قبل اختيار هذا النمط من التصميم البرمجي من أن المُدخلات المشتركة وكثرة طرق العرض الممكنة هما سبب المشكل.
يغلّف Encapsulate الصنف القارئ Reader
تحليل المُدخلات المشتركة. تسمح هرمية الباني بالإنشاء متعدد الأشكال Polymorphic للعديد من الأهداف أو العروض المتميزة.
ملاحظة: نعني بالتغليف Encapsulation في إطار البرمجة كائنيّة التوجه Object-oriented programming تلك الآليّة التي تتيح جمع البيانات (الخاصيّات Attributes) والإجراءات المطبّقة عليها (التوابع Methods) ضمن نفس الكائن، مع تقييد إمكانيّة وصول الكائنات الأخرى إلى عناصر الكائن.
يبيّن مخطَّط الأصناف التالي الارتباط بين الأصناف الداخلة في تنفيذ هذا النمط:
- يُغلّف تحليل المدخلات المشتركة ضمن صنف القارئ.
-
يُصمَّم ميثاق (بروتوكول) قياسي لإنشاء جميع العروض المحتملة في المُخرجات. - تُحفظ خطوات عمل هذا البروتوكول في واجهة الباني (الصنف
Converter
في المخطَّط). -
يُعرّف صنف مشتق من الباني لكل عرض مستهدف (الأصناف
ASCIIConverter
،PostScriptConverter
وPDFConverter
في المخطَّط). - ينشئ العميل كائنًا للقراءة وكائنًا للبناء، ثم يسجّل الأخيرَ لدى الأول.
- يطلب العميل من القارئ أن “يبني”.
- يطلب العميل من الباني أن يعيد النتيجة.
ترجمة - بتصرّف - للمقال Builder Design Pattern لأصحابه Alexander Shvets, Gerhard Frey, Marina Pavlova.
حقوق الصورة البارزة محفوظة لـ Freepik
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.