Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مقدمة في أنماط التصميم

جزء من قسم Object Oriented Programming في رحلة C# على Coddy — الدرس 51 من 70.

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

فكر في أنماط التصميم (design patterns) كأنها مخططات. فهي لا تمنحك كوداً برمجياً دقيقاً لنسخه، ولكنها تصف كيفية تنظيم الفئات (classes) والكائنات (objects) لحل تحديات معينة. عندما يذكر شخص ما "استخدم نمط Factory هنا"، يفهم المطورون ذوو الخبرة على الفور الهيكل العام المقترح.

تنقسم أنماط التصميم إلى ثلاث فئات رئيسية:

الفئةالغرضالأمثلة
إنشائيةكيفية إنشاء الكائناتSingleton, Factory
هيكليةكيفية تكوين الكائناتAdapter, Decorator
سلوكيةكيفية تواصل الكائناتObserver, Strategy

تعتمد الأنماط التي سنستكشفها بشكل مباشر على مفاهيم البرمجة كائنية التوجه (OOP) التي تعلمتها بالفعل - الواجهات (interfaces)، والوراثة (inheritance)، وتعدد الأشكال (polymorphism)، والتكوين (composition). يستفيد كل نمط من هذه الأساسيات بطرق محددة لتحقيق المرونة، أو قابلية الصيانة، أو قابلية إعادة الاستخدام.

في الدروس القادمة، ستقوم بتنفيذ العديد من الأنماط الأساسية بدءاً من Singleton و Factory و Observer و Strategy. سيساعدك فهم هذه الأنماط على التعرف على الحلول الشائعة في قواعد الكود الحالية واتخاذ قرارات معمارية أفضل في مشاريعك الخاصة.

challenge icon

التحدي

سهل

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

ستقوم بإنشاء ثلاثة ملفات لفصل المسؤوليات المختلفة:

  • Pattern.cs: قم بتعريف فئة Pattern داخل مساحة الأسماء Patterns والتي تمثل نمط تصميم واحد. يجب أن يكون لكل نمط Name، و Category (Creational، أو Structural، أو Behavioral)، و Description. قم بتضمين طريقة GetSummary() التي تعيد سلسلة نصية منسقة: [{Category}] {Name}: {Description}
  • PatternCatalog.cs: قم بإنشاء فئة PatternCatalog داخل مساحة الأسماء Patterns تدير مجموعة من الأنماط. يجب أن يكون الكتالوج الخاص بك قادراً على إضافة الأنماط وأن يحتوي على طريقة GetPatternsByCategory(string category) التي تعيد قائمة بجميع الأنماط المطابقة لتلك الفئة. قم أيضاً بتضمين طريقة GetAllSummaries() التي تعيد قائمة بسلاسل الملخصات لجميع الأنماط في الكتالوج.
  • Program.cs: اجمع كل شيء معاً عن طريق إنشاء كتالوج وملئه بالأنماط بناءً على المدخلات. ثم قم بعرض الأنماط التي تمت تصفيتها حسب الفئة.

ستتلقى المدخلات التالية:

  • عدد الأنماط المراد إضافتها
  • لكل نمط: ثلاثة أسطر تحتوي على الاسم، والفئة، والوصف
  • الفئة المراد التصفية بناءً عليها

بعد إضافة جميع الأنماط إلى الكتالوج الخاص بك، قم بطباعة ملخصات الأنماط التي تطابق فئة التصفية، ملخص واحد في كل سطر. إذا لم تتطابق أي أنماط، فقم بطباعة No patterns found.

على سبيل المثال، إذا كانت المدخلات هي:

3
Singleton
Creational
Ensures only one instance exists
Observer
Behavioral
Notifies dependents of state changes
Factory
Creational
Creates objects without specifying exact class
Creational

يجب أن يكون المخرج:

[Creational] Singleton: Ensures only one instance exists
[Creational] Factory: Creates objects without specifying exact class

يوضح هذا التحدي كيف أن تنظيم الفئات ذات الصلة في ملفات منفصلة يحافظ على نظافة وقابلية صيانة الكود الخاص بك - وهو مبدأ يصبح أكثر أهمية عندما تقوم بتنفيذ أنماط تصميم فعلية في الدروس القادمة!

ورقة مرجعية

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

تندرج أنماط التصميم تحت ثلاث فئات رئيسية:

الفئةالغرضأمثلة
الإنشائية (Creational)كيفية إنشاء الكائناتSingleton, Factory
الهيكلية (Structural)كيفية تكوين الكائناتAdapter, Decorator
السلوكية (Behavioral)كيفية تواصل الكائناتObserver, Strategy

تعتمد أنماط التصميم على مفاهيم البرمجة كائنية التوجه (OOP) مثل interfaces، و inheritance، و polymorphism، و composition لتحقيق المرونة، وقابلية الصيانة، وإعادة الاستخدام.

جرّب بنفسك

using System;
using System.Collections.Generic;
using Patterns;

class Program
{
    public static void Main(string[] args)
    {
        // قراءة عدد الأنماط
        int n = Convert.ToInt32(Console.ReadLine());
        
        // إنشاء PatternCatalog جديد
        PatternCatalog catalog = new PatternCatalog();
        
        // TODO: قراءة تفاصيل كل نمط (name، category، description)
        // وإضافتها إلى الكتالوج
        for (int i = 0; i < n; i++)
        {
            string name = Console.ReadLine();
            string category = Console.ReadLine();
            string description = Console.ReadLine();
            
            // TODO: إنشاء Pattern وإضافته إلى الكتالوج
        }
        
        // قراءة الفئة المراد التصفية بها
        string filterCategory = Console.ReadLine();
        
        // TODO: الحصول على الأنماط حسب فئة التصفية
        // وطباعة ملخصاتها
        // إذا لم تتطابق أي أنماط، اطبع "No patterns found"
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming