--- 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) يحتوي على أمثلة ومعلومات إضافية حول أنماط التصميم