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

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

جزء من قسم البرمجة كائنية التوجه في رحلة Java على Coddy. الدرس 64 من 87.

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

فكّر في design patterns على أنها مخططات. فهي لا تمنحك code مكتملًا لتنسخه وتلصقه، بل تصف كيفية تنظيم classes وobjects لحل نوع محدد من المشكلات. تستفيد patterns التي ستتعلّمها من مفاهيم OOP التي أتقنتها بالفعل: الوراثة، وinterfaces، وتعدد الأشكال، والتركيب.

تنقسم Design patterns إلى ثلاث فئات رئيسية:

Categoryالغرضأمثلة
CreationalHow objects are createdSingleton، Factory، Builder
StructuralHow objects are composedAdapter، Decorator، Composite
BehavioralHow objects communicateObserver، Strategy، Command

لماذا تتعلم أنماط التصميم؟ إنها تمنحك مفردات مشتركة مع المطورين الآخرين: فعندما تقول "استخدم Factory هنا"، فإنك توصل فكرة معقدة على الفور. كما أنها تساعدك على كتابة code أكثر مرونة وقابلية للصيانة من خلال تطبيق مبادئ مثل "برمج وفقًا لـ interface، وليس وفقًا لتطبيق."

في الدروس القادمة، ستقوم بتنفيذ العديد من patterns الأساسية، بدءًا من الأنماط الإنشائية مثل Singleton وFactory، ثم الانتقال إلى patterns السلوكية مثل Observer وStrategy.

challenge icon

التحدي

سهل

لنَبْنِ مُصنِّفًا بسيطًا للأنماط يوضّح فهمك للفئات الثلاث لأنماط التصميم! ستنشئ نظامًا يصنّف الأنماط ويشرح الغرض منها، مع تنظيم الشيفرة عبر ملفات متعددة.

ستنشئ ثلاثة ملفات:

  • Pattern.java: Create واجهة تُسمّى Pattern وتحدّد العقد لجميع أنماط التصميم. يجب أن تعلن واجهتك عن methodَين: String getCategory() اللذان يعيدان فئة النمط (Creational أو Structural أو Behavioral)، وString getPurpose() اللذان يعيدان وصفًا لما تفعله تلك الفئة من الأنماط.
  • PatternInfo.java: Create ثلاث classes تُنفّذ واجهة Pattern الخاصة بك، بحيث تمثّل كلٌّ منها فئةً واحدة من أنماط التصميم:

    CreationalPattern - يجب أن يعيد "Creational" للفئة و"How objects are created" للغرض.

    StructuralPattern - يجب أن يعيد "Structural" للفئة و"How objects are composed" للغرض.

    BehavioralPattern - يجب أن يعيد "Behavioral" للفئة و"How objects communicate" للغرض.

  • Main.java: اجمع مُصنِّف الأنماط الخاص بك! ستتلقى input واحدًا: اسم نمط (String) سيكون واحدًا من "Singleton" أو "Factory" أو "Adapter" أو "Decorator" أو "Observer" أو "Strategy".

    بناءً على input، أنشئ pattern object appropriate:

    • "Singleton" و"Factory" هما نمطا Creational
    • "Adapter" و"Decorator" هما نمطا Structural
    • "Observer" و"Strategy" هما نمطا Behavioral

    خزّن pattern object في variable من النوع Pattern (الواجهة)، موضّحًا مبدأ البرمجة على واجهة. ثم اطبع الأسطر الثلاثة following:

    Pattern: [input pattern name]

    Category: [category from getCategory()]

    Purpose: [purpose from getPurpose()]

ستتلقى input واحدًا: اسم نمط تصميم (String).

يعزّز هذا التحدي الفكرة الأساسية من الدرس: تُنظَّم أنماط التصميم في فئات بناءً على المشكلة التي تحلّها. ومن خلال استخدام واجهة، فإنك تتدرّب أيضًا على مبدأ «البرمجة على واجهة، وليس على تنفيذ» - وهو مفهوم أساسي يجعل أنماط التصميم قوية إلى هذا الحد!

جرّب بنفسك

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String patternName = scanner.nextLine();
        
        // TODO: أعلن عن متغير من النوع Pattern (الواجهة)
        Pattern pattern = null;
        
        // TODO: بناءً على patternName، أنشئ كائن النمط المناسب:
        // - "Singleton" و "Factory" هما أنماط إنشائية (Creational)
        // - "Adapter" و "Decorator" هما أنماط هيكلية (Structural)
        // - "Observer" و "Strategy" هما أنماط سلوكية (Behavioral)
        
        // TODO: اطبع المخرجات بالتنسيق التالي:
        // Pattern: [اسم النمط المدخل]
        // Category: [الفئة من getCategory()]
        // Purpose: [الغرض من getPurpose()]
    }
}
quiz iconاختبر نفسك

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

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Java عبر الإنترنت