---
title: Design Patterns
localeTitle: أنماط التصميم
---
## أنماط التصميم

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

### لماذا تصميم الأنماط؟

يوفر تطوير أنماط التصميم العديد من المزايا:

*   من السهل اتباع مبادئ البرمجة الجيدة مثل **[مبادئ](https://medium.com/@cramirez92/s-o-l-i-d-the-first-5-priciples-of-object-oriented-design-with-javascript-790f6ac9b9fa) [SOLID](https://www.youtube.com/watch?v=XzdhzyAukMM) .**
*   إنها تحافظ قطع كود أصغر حتى متاحة أسهل **لاختبار** **والتصحيح**
*   فهو يساعد في الحفاظ على الشفرة مقترنة بشكل فضفاض حتى يسهل **إعادة استخدام** الكود **وتحديثه** للتطبيقات الجديدة
*   إنه يسهل **فهم** الشفرة ، بحيث يمكن للمساهمين الجدد أن **يكبروا بسرعة**

استخدام أنماط التصميم يتطلب بعض المقايضات ، ويجب على مطوري البرامج الجدد أن يتذكروا ما يلي:

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

### دعم اللغة

نشأت أنماط التصميم من عالم اللغات المكتوبة بشكل ثابت مثل C ++ و Java و C #. تعتمد معظم الموارد حول التطوير حسب نمط التصميم على واحدة من هذه اللغات.

ومع ذلك ، فإن أنماط التصميم هي فقط: الأنماط. فهي **ليست تطبيقات** ، مثل الطبقات أو الواجهات ، **وليست مقيدة لأي لغة واحدة** .

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

### الاستخدامات

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

*   الأنماط **الإبداعية** تصف كيفية إنشاء كائنات جديدة
*   تصف الأنماط **الهيكلية** كيفية إنشاء الكائنات خارج الكائنات الأخرى
*   الأنماط **السلوكية** تصف كيف تتواصل الكائنات مع بعضها البعض

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

#### معلومات اكثر:

*   [أنماط تصميم](https://github.com/kamranahmedse/design-patterns-for-humans) كامران أحمد [للبشر](https://github.com/kamranahmedse/design-patterns-for-humans) هي مقدمة ممتازة للأنماط المحددة
*   [أنماط التصميم](https://en.wikipedia.org/wiki/Design_Patterns) هو الكتاب الذي بدأ هذه الممارسة
*   توفر [أنماط](https://martinfowler.com/eaaCatalog/) مارتن فاولر [من هندسة التطبيقات التطبيقية](https://martinfowler.com/eaaCatalog/) مجموعة من الأنماط الأكثر تطوراً لتطبيقات المؤسسات
*   يوفر Sourcemaking موردًا [عبر الإنترنت](https://sourcemaking.com/design_patterns) يحتوي على أمثلة ومعلومات إضافية حول أنماط التصميم