نمط التصميم

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

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

تفاصيل
تسمى المجموعة المنظمة من أنماط التصميم المرتبطة بحقل معين بلغة النمط. تعطي هذه اللغة مصطلحات مشتركة لمناقشة المواقف التي يواجهها المصممون.

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

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

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

على سبيل المثال ، في عمل كريستوفر ألكسندر ، تقف مواقف الحافلات وغرف الانتظار في مركز الجراحة ضمن سياق نمط “A PLACE TO WAIT”.

تصميم أنماط الطبقات
يميز كتاب أنماط عصابة رباعية (ISBN 0-201-63361-2) ثلاثة أنماط من أنماط التصميم ، ولكن لا يوجد معيار حاد يفصل بينها عن بعضها البعض.

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

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

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

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

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

مثال (نمط النموذج الأولي)
عند إنشاء كائنات من فئات معقدة و / أو باهظة الثمن ، فإنها تسمح بإنشاء كائنات جديدة عن طريق أخذ العينات من الكائنات الموجودة بدلاً من أن يتم إنشاؤها من البداية. وبهذه الطريقة ، يتم إنشاء كائنات جديدة بسهولة ولا يتم احتلال الموارد بدون داعٍ.

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

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

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

الأنماط الهيكلية
يقدم الاقتراحات التي تسمح ببناء هياكل البرامج أوسع من خلال الجمع بين فئات النمط الهيكلي والكائنات. تنقسم أنماط بنية الطبقة وأنماط بنية الكائن إلى قسمين.

توسيع أنماط بنية فئة بنيات باستخدام استخدام فئة توريث أو compounding التطبيقات. توضح أنماط بنية الكائن كيفية دمج الكائنات للحصول على وظائف جديدة.

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

الواجهة (نمط الواجهة)
إنه يسمح باستخدام بنية معقدة معًا في واجهة واحدة.

نمط الديكور
يسمح كائن لإضافة مسؤوليات جديدة دون تغيير الكائن. يجعل من الممكن تحسين وظائف الكائنات دون subclassification.

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

نمط Flyweight
بدلاً من إنشاء عدد كبير من الكائنات المتشابهة ، فإنه يسمح بإنشاء بنية كائن مزدحمة عن طريق إنشاء كائنات مرئية من كائن مثال. يتم تخزين متغيرات الحالة للكائنات المرئية من قبل المستخدم ، وليس بواسطة الكائن نفسه.

نمط محول
يتم استخدامه لتكييف واجهات كائنات أو فئات من مصادر مختلفة.

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

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

تنقسم الأنماط السلوكية أيضًا إلى قسمين ، تمامًا كما هي في الأنماط البنيوية: أنماط سلوك الصفوف وأنماط سلوك الكائنات.

تمكّن أنماط سلوك الصف السلوك من التوزيع بين الفئات باستخدام الوراثة. تتيح أنماط سلوك الكائنات تحقيق السلوك من خلال مجموعة كائن لا يمكن تحقيقها بسهولة بواسطة كائن واحد من خلال تكوين الكائن.

نمط الوسيط
يمكن توجيه الكائنات المتصلة ببعضها البعض من نقطة واحدة (أي بواسطة الباحث) تحت نفس السقف. تتصل الكائنات المتصلة باحث البحث بتغييرات الحالة إلى باحث البحث. يجد الباحث طلبات من الكائنات المتعلقة بالتحرير والترتيب المطلوب من قبل التطبيق. كائنات المستخدم الأعلى مستوى تتصل فقط بآلة البحث.

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

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

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

نمط القيادة
إنه يجعل من الممكن تحويل طلبات المستخدم (الهدف) إلى كائنات ومعالجتها. وبهذه الطريقة ، يمكن تحويل رغبات المستخدمين المختلفين إلى سجلات موضوعية وإبقائها في قوائم الانتظار أو السجلات. من الممكن أيضا عكس المعاملات التي أجريت على هذا القبو.

سلسلة المسؤوليات (سلسلة نمط المسؤولية)
يتيح المستخدم (الهدف) إمكانية تقييم الطلب بواسطة كائنات متعددة. ينقل المستخدم الطلب عبر واجهة واحدة. تتم معالجة الطلبات بدورها بواسطة الكائنات المتصلة بالطلب. يتم نقل الطلب من كائن إلى آخر على السلسلة حتى يتم الترحيب به. من الممكن إضافة أو إزالة كائنات جديدة في السلسلة بمرور الوقت. لا يتأثر المستخدم بالواجهة من مثل هذه التغييرات.

نمط المترجم
اللغة الزائفة المحددة لتلبية متطلبات التطبيقات المعقدة هي نموذج مترجم. تسمح اللغة الزائفة بإمكانية تطبيق القواعد النحوية بسهولة عن طريق تعريفها كطبقات. بما أن القواعد النحوية تُعرّف على أنها فئات ، فيمكن تعديلها وتحسينها بسهولة.

ياديجار (نمط تذكار)
يستخدم Yadigâr لإخفاء حالات الكائنات التي تلعب أدوارًا مهمة في برنامج التطبيق ولتذكيرهم أو تذكيرهم عند الضرورة.

نمط التكرار
ويضمن الوصول إلى الكائنات الموجودة تحت كائن كتلة (كائن Aggragate) بالتسلسل ، بغض النظر عن كيفية تمثيل الكائنات أو تحقيقها. يمكن الوصول إلى الكائنات الممثلة بهذه الطريقة عبر واجهة واحدة.

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

نمط الزائر
يسمح عمليات جديدة لتضاف على هيكل مركب. يزور الزائر الكائنات المنفردة داخل البنية المركبة ، ويجمع المعلومات الضرورية ، ويعالجها ، ويعرضها على المستخدم.