أنماط إبداعية

في هندسة البرمجيات ، تصميم أنماط خلاقة(ابداعية) (بالإنجليزية: creational design patterns)‏ هي أنماط التصميم design patterns التي تتعامل مع ألية إنشاء كائن، في محاولة لإنشاء كائنات بطريقة مناسبة لهذا الوضع. يمكن أن يؤدي الشكل الأساسي لإنشاء الكائن إلى مشكلات في التصميم أو تعقيد إضافي للتصميم. تحل أنماط التصميم الإبداعي هذه المشكلة عن طريق التحكم بطريقة ما في إنشاء هذا الكائن.

تتكون أنماط التصميم الإبداعي من فكرتين مهيمنتين. الأول هو تغليف(بالإنجليزية: encapsulating )‏المعرفة حول الاصناف الملموسة التي يستخدمها النظام. الآخر وهو إخفاءhiding كيفية إنشاء ودمجcreational design (بالإنجليزية: combined )‏أمثلة(بالإنجليزية: instances)‏ هذه اصناف الملموسة(بالإنجليزية: concrete classes)‏. [1]

يتم تصنيف أنماط التصميم الإبداعي أيضًا إلى أنماط إنشاء الكائنات object-creational patterns وأنماط إنشاء الصنفClass-creational patterns ، حيث تتعامل أنماط إنشاء الكائنات مع إنشاء الكائنات وتتعامل أنماط إنشاء الصنف مع إنشاء مثيل للصنف Class-instantiation. بتفاصيل أكبر، تؤجل أنماط إنشاء الكائنات جزءًا من إنشاء الكائن الخاص بها إلى كائن آخر، بينما تؤجل أنماط إنشاء الصنف إلى إنشاء اصناف الفرعية. [2]

خمسة أنماط تصميم معروفة هي جزء من الأنماط الإبداعية هي

  • نمط المصنع المجرد(بالإنجليزية: Abstract factory pattern)‏ ، الذي يوفر واجهة لإنشاء كائنات مرتبطة أو تابعة دون تحديد اصناف المحدد للكائناتobjects' concrete classes. [3]
  • نمط البناء Builder pattern، الذي يفصل بناء كائن معقد عن تمثيله بحيث يمكن لعملية البناء نفسها إنشاء تمثيلات مختلفة.
  • نمط طريقة المصنع Factory method pattern، والذي يسمح للصنف بتأجيل الاستنساخinstantiation إلى اصناف الفرعيةsubclasses. [4]
  • نمط النموذج الأوليPrototype pattern ، الذي يحدد نوع الكائن المراد إنشاؤه باستخدام مثيل نموذجيprototypical instance ، ويخلق كائنات جديدة عن طريق استنساخ هذا النموذج الأولي.
  • نمط Singleton ، الذي يضمن أن الصنف لديه مثيل واحد فقط، ويوفر نقطة وصول عالمية إليهglobal point of access. [5]

تعريفعدل

تهدف الأنماط الإبداعية إلى فصل النظام عن كيفية إنشاء وتأليف وتمثيل كائناته. إنها تزيد من مرونة النظام من حيث ماذا، من، وكيف، ومتى يتم إنشاء الكائن. [6]

الاستخدامعدل

نظرًا لأن هندسة البرمجيات الحديثة تعتمد على تكوينcomposition الكائن أكثر من وراثة الصنفوفclass inheritance ، فإن التركيز يتحول بعيدًا عن سلوكيات التشفير الثابتhard-coding نحو تحديد مجموعة أصغر من السلوكيات الأساسية التي يمكن أن تتكون في سلوكيات أكثر تعقيدًا. [7] سلوكيات الترميز الصلب Hard-coding غير مرنة لأنها تتطلب تجاوزoverriding أو إعادة تنفيذ re-implementingكل شيء من أجل تغيير أجزاء من التصميم. بالإضافة إلى ذلك، لا يشجع الترميز الثابت على إعادة الاستخدام ويجعل من الصعب تتبع الأخطاء. لهذه الأسباب، تكون الأنماط الإبداعية أكثر فائدة من سلوكيات الترميز الثابت. الأنماط الإبداعية تجعل التصميم أكثر مرونة. توفر طرقًا مختلفة لإزالة المراجع الصريحةexplicit references في الاصناف الملموسة من الشفرةcode التي تحتاج إلى نسخهاinstantiate . [8] وبعبارة أخرى، فإنها تخلق الاستقلالية للكائنات واصناف.

ضع في اعتبارك تطبيق الأنماط الإبداعية عندما:

  • يجب أن يكون النظام مستقلاً عن كيفية إنشاء كائناته ومنتجاته(بالإنجليزية: products )‏.
  • تم تصميم مجموعة من الكائنات ذات الصلة لاستخدامها معًا.
  • إخفاء تطبيقات مكتبة صنف(بالإنجليزية: class library)‏ أو منتج (بالإنجليزية: product )‏، والكشف عن واجهاتهم(بالإنجليزية: interfaces)‏ فقط.
  • بناء (بالإنجليزية: Constructing )‏تمثيل(بالإنجليزية: representation )‏مختلف للكائنات المعقدة المستقلة.
  • يريد الصنف أن يقوم الصنف الفرعي بتنفيذ(بالإنجليزية: implement )‏الكائن الذي تقوم بإنشائه.
  • يتم تحديد عمليات إنشاء الصنف(بالإنجليزية: instantiations)‏ في وقت التشغيل(بالإنجليزية: run-time)‏.
  • يجب أن يكون هناك مثيل واحsingle instanceد ويمكن للعميل الوصول إلى هذا المثيل instance في جميع الأوقات.
  • يجب أن يكون المثالInstance قابلاً للتوسيع (بالإنجليزية: extensible )‏دون تعديل(بالإنجليزية: modified)‏.

بناءعدل

فيما يلي رسم بياني لفصل بسيط تشترك فيه معظم الأنماط الإبداعية. لاحظ أن الأنماط الإبداعية المختلفة تتطلب اصنافا إضافية ومختلفة.

المشاركون Participants:

أمثلةعدل

تتضمن بعض أمثلة أنماط التصميم الإبداعي ما يلي:

  • نمط (بالإنجليزية: Factory Abstract)‏ : يطلب الصنف الكائنات التي يتطلبها من كائن المصنع بدلاً من إنشاء الكائنات مباشرة
  • نمط طريقة المصنع(بالإنجليزية: Factory method pattern)‏: : مركزة إنشاء كائن من نوع معين باختيار واحد من عدة تطبيقات
  • نمط الباني : فصل بناءconstruction كائن معقد عن تمثيله(بالإنجليزية: representation)‏ بحيث يمكن لعملية البناء نفسها أن تُنشأ تمثيلاتrepresentations مختلفة
  • نمط حقن التبعية(بالإنجليزية: Dependency Injection pattern)‏ : الصنف يقبل الكائنات التي تتطلبهاrequires من حاقن بدلاً من إنشاء الكائنات مباشرة
  • نمط التهيئة البطيء(بالإنجليزية: Lazy initialization pattern)‏ : أسلوب تأخير إنشاء كائن، أو حساب قيمة، أو عملية مكلفة أخرى حتى المرة الأولى اللازمة
  • نمط تجمع الكائناتObject pool pattern : تجنب الحصول على الموارد وتحريرها بشكل مكلف عن طريق إعادة تدوير الكائنات التي لم تعد مستخدمة
  • نمط النموذج الأولي Prototype pattern: يستخدم عندما يتم تحديد نوع الكائنات التي يتم إنشاؤها بواسطة مثيل نموذجي(بالإنجليزية: prototypical )‏ ، يتم استنساخه لإنتاج كائنات جديدة
  • نمط Singleton : قصر نسخ صنف على كائن واحد

انظر أيضاعدل

المراجععدل

  1. ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Design Patterns. Massachusetts: Addison-Wesley. صفحة 81. ISBN 978-0-201-63361-0. مؤرشف من الأصل في 18 مايو 2020. اطلع عليه بتاريخ 22 مايو 2015. الوسيط |CitationClass= تم تجاهله (مساعدة)
  2. ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Design Patterns. Massachusetts: Addison-Wesley. ISBN 978-0-201-63361-0. مؤرشف من الأصل في 26 مارس 2020. اطلع عليه بتاريخ 22 مايو 2015. الوسيط |CitationClass= تم تجاهله (مساعدة)
  3. ^ Freeman, Eric; Freeman, Elisabeth; Sierra, Kathy; Bates, Bert (2004). Hendrickson; Loukides, Mike (المحررون). Head First Design Patterns. California: O'Reilly Media. صفحة 156. ISBN 978-0-596-00712-6. مؤرشف من الأصل في 30 أبريل 2020. اطلع عليه بتاريخ 22 مايو 2015. الوسيط |CitationClass= تم تجاهله (مساعدة)
  4. ^ Freeman, Eric; Freeman, Elisabeth; Sierra, Kathy; Bates, Bert (2004). Hendrickson; Loukides, Mike (المحررون). Head First Design Patterns. California: O'Reilly Media. صفحة 134. ISBN 978-0-596-00712-6. مؤرشف من الأصل في 30 أبريل 2020. اطلع عليه بتاريخ 22 مايو 2015. الوسيط |CitationClass= تم تجاهله (مساعدة)
  5. ^ Freeman, Eric; Freeman, Elisabeth; Sierra, Kathy; Bates, Bert (2004). Hendrickson; Loukides, Mike (المحررون). Head First Design Patterns. California: O'Reilly Media. صفحة 177. ISBN 978-0-596-00712-6. مؤرشف من الأصل في 30 أبريل 2020. اطلع عليه بتاريخ 22 مايو 2015. الوسيط |CitationClass= تم تجاهله (مساعدة)
  6. ^ Judith, Bishop (2007). C# 3.0 Design Patterns. California: O'Reilly Media. صفحة 336. ISBN 978-0-596-52773-0. مؤرشف من الأصل في 18 مايو 2020. اطلع عليه بتاريخ 22 مايو 2015. الوسيط |CitationClass= تم تجاهله (مساعدة)
  7. ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Design Patterns. Massachusetts: Addison-Wesley. صفحة 84. ISBN 978-0-201-63361-0. مؤرشف من الأصل في 18 مايو 2020. اطلع عليه بتاريخ 22 مايو 2015. الوسيط |CitationClass= تم تجاهله (مساعدة)
  8. ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Design Patterns. Massachusetts: Addison-Wesley. صفحة 85. ISBN 978-0-201-63361-0. مؤرشف من الأصل في 18 مايو 2020. اطلع عليه بتاريخ 22 مايو 2015. الوسيط |CitationClass= تم تجاهله (مساعدة)