Skip to content

Latest commit

 

History

History
101 lines (77 loc) · 5.94 KB

explain.md

File metadata and controls

101 lines (77 loc) · 5.94 KB

1. Singleton Pattern

الوصف:

يُستخدم لضمان وجود نسخة واحدة فقط (Instance) من كائن معين طوال فترة تشغيل البرنامج، مثل إدارة بيانات أو موارد مشتركة.

أين تم استخدامه:

  • PatientDatabaseManager:

    • إدارة بيانات المرضى (مثل الإضافة والاسترجاع).
    • الهدف: التأكد من أن هناك مدير بيانات واحد فقط مسؤول عن إدارة المرضى.
  • لماذا؟: لضمان التزامن والاتساق عند التعامل مع قاعدة بيانات المرضى في كل أجزاء النظام.


2. Factory Pattern

الوصف:

يُستخدم لإنشاء الكائنات (Objects) بشكل ديناميكي بناءً على نوع معين، بدلاً من كتابة كود إنشاء منفصل لكل كائن.

أين تم استخدامه:

  • DoctorFactory:
    • إنشاء كائنات الأطباء (مثل Cardiologist و Neurologist).
    • يتم تمرير تخصص الطبيب (Specialty) كمدخل، وتقوم الـ Factory بإرجاع كائن الطبيب المناسب.

لماذا؟:

  • لتجنب كتابة أكواد متكررة عند إنشاء أنواع مختلفة من الأطباء.
  • إضافة أنواع جديدة من الأطباء (مثل طبيب أسنان) يكون بسيطًا للغاية دون تعديل الكود الحالي.

3. Builder Pattern

الوصف:

يُستخدم لإنشاء كائنات معقدة خطوة بخطوة، مع السماح بمرونة في تعيين القيم.

أين يمكن استخدامه (غير موجود حاليًا ولكن يمكن تطبيقه):

  • عند إنشاء Appointment (موعد):
    • يمكن استخدام Builder لتعيين القيم مثل اسم المريض، اسم الطبيب، وقت الموعد، وما إلى ذلك.
    • مثال:
      Appointment appointment = new AppointmentBuilder()
                                    .withPatient("John Doe")
                                    .withDoctor("Dr. Smith")
                                    .withTime("10:00 AM")
                                    .build();

لماذا؟:

  • لتجنب كتابة مُنشئات (Constructors) معقدة تحتوي على عدد كبير من الوسائط.
  • تحسين قراءة الكود.

4. Prototype Pattern

الوصف:

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

أين تم استخدامه:

  • Appointment:
    • يمكن استخدام طريقة clone() لإنشاء نسخة من موعد موجود لتعديله أو إعادة استخدامه في وقت لاحق.

لماذا؟:

  • لتوفير الوقت والموارد عند الحاجة إلى نسخ كائنات معقدة.

5. Adapter Pattern

الوصف:

يُستخدم لربط واجهتين مختلفتين بحيث يمكن استخدام كود مكتوب مسبقًا مع نظام جديد.

أين يمكن استخدامه (غير موجود حاليًا ولكن يمكن تطبيقه):

  • AppointmentAdapter:
    • إذا كان هناك نظام قديم لإدارة المواعيد ونريد دمجه مع النظام الحالي، يمكن استخدام Adapter لتحويل واجهة النظام القديم لتكون متوافقة مع النظام الجديد.

لماذا؟:

  • لتجنب إعادة كتابة النظام القديم.
  • تسهيل الدمج بين الأنظمة المختلفة.

6. Proxy Pattern

الوصف:

يُستخدم كبديل لكائن حقيقي للتحكم في الوصول إليه، مثل تحسين الأداء أو إضافة مستوى من الأمان.

أين يمكن استخدامه (غير موجود حاليًا ولكن يمكن تطبيقه):

  • يمكن استخدام Proxy للتحكم في الوصول إلى قاعدة بيانات المرضى أو المواعيد:
    • مثال: عند محاولة الوصول إلى قائمة المرضى، يتم تحميل البيانات فقط عند الطلب (Lazy Loading).

لماذا؟:

  • لتحسين الأداء.
  • لتوفير الأمان أو التحكم الإضافي عند الوصول إلى الموارد الحساسة.

الاستخدام الكلي للأنماط التصميمية

النمط مكان التطبيق الفائدة
Singleton PatientDatabaseManager ضمان وجود نسخة واحدة فقط من مدير المرضى.
Factory DoctorFactory إنشاء الأطباء بناءً على التخصص بسهولة وإضافة أنواع جديدة دون تغيير كبير.
Builder Appointment (ممكن إضافته) إنشاء المواعيد خطوة بخطوة بطريقة مرنة.
Prototype Appointment إنشاء نسخ من المواعيد لتعديلها أو إعادة استخدامها.
Adapter (يمكن إضافته لاحقًا) دمج نظام قديم مع النظام الحالي.
Proxy (يمكن إضافته لاحقًا) تحسين الأداء أو إضافة مستوى من التحكم عند الوصول إلى البيانات.