CodeGym /مدونة جافا /Random-AR /نمط تصميم الجسر
John Squirrels
مستوى
San Francisco

نمط تصميم الجسر

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

ما هو نمط الجسر؟

نمط الجسر هو نمط التصميم الهيكلي. بمعنى آخر، وظيفتها الرئيسية هي إنشاء بنية كاملة من الفئات والكائنات. يقوم الجسر بذلك عن طريق تقسيم فئة واحدة أو أكثر إلى تسلسلات هرمية منفصلة : التجريد والتنفيذ . إن التغيير في الوظيفة في أحد التسلسلات الهرمية لا يعني تغييرًا في التسلسل الهرمي الآخر. كل هذا جيد وجيد، لكن هذا التعريف واسع جدًا ولا يجيب على السؤال الأكثر أهمية: "ما هو نمط الجسر؟" أعتقد أنه سيكون من الأسهل عليك فهم تطبيقه العملي. لذا، دعونا ننشئ سيناريو كلاسيكيًا لنمط الجسر. لدينا فئة مجردة تمثل شكلًا هندسيًا عامًا: Shape
  • java

    public abstract class Shape {
       public abstract void draw();
    }

    عندما نقرر إضافة أشكال مثل المثلثات والمستطيلات، سنجعلها ترث الفئة Shape:

  • مستطيل.جافا:

    public class Rectangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
       }
    }
  • مثلث.جافا:

    public class Triangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing triangle");
       }
    }
كل شيء يبدو بسيطًا حتى اللحظة التي نقدم فيها مفهوم اللون. draw()أي أن كل شكل سيكون له لونه الخاص، وستعتمد وظيفة الطريقة على هذا اللون. للحصول على تطبيقات مختلفة لهذه draw()الطريقة، نحتاج إلى إنشاء فئة لكل مجموعة من الألوان والشكل. إذا كان لدينا ثلاثة ألوان، فإننا بحاجة إلى ستة فئات: TriangleBlackو TriangleGreen، TriangleRedو RectangleBlack، RectangleGreenو RectangleRed. ستة فصول ليست مشكلة كبيرة. لكن! إذا كنا بحاجة إلى إضافة شكل أو لون جديد، فإن عدد الفئات ينمو بشكل كبير. كيفية الخروج من هذا الوضع؟ إن تخزين اللون في الحقل وتعداد كافة الخيارات باستخدام العبارات الشرطية ليس هو الحل الأفضل. الحل الجيد هو نقل اللون إلى واجهة منفصلة . لم يمض وقت طويل قبل أن يتم تنفيذه: فلنقم بإنشاء Colorواجهة بثلاثة تطبيقات: BlackColorو GreenColorو RedColor:
  • اللون.جافا:

    public interface Color {
       void fillColor();
    }
  • اللون الأسود.جافا:

    public class BlackColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in black color");
       }
    }
  • GreenColor.java

    public class GreenColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in green color");
       }
    }
  • RedColor.java

    public class RedColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in red color");
       }
    }

    الآن نضيف Colorحقلاً إلى Shapeالفصل. سوف نحصل على قيمته في المنشئ.

  • شكل جافا:

    public abstract class Shape {
       protected Color color;
    
       public Shape(Color color) {
           this.color = color;
       }
    
       public abstract void draw();
    }

    سوف نستخدم colorالمتغير في Shapeالتطبيقات. وهذا يعني أن الأشكال يمكنها الآن استخدام وظيفة الواجهة Color.

  • مستطيل.java

    public class Rectangle extends Shape {
    
       public Rectangle(Color color) {
           super(color);
       }
    
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
           color.fillColor();
       }
    }
تا دا! الآن يمكننا إنشاء ألوان وأشكال مختلفة إلى ما لا نهاية، وسيزداد عدد الفئات خطيًا فقط. الحقل Color colorعبارة عن جسر يربط بين تسلسلين هرميين منفصلين.

كيفية بناء الجسر: التجريد والتنفيذ

دعونا نلقي نظرة على مخطط الفصل الذي يصور نمط الجسر: تقديم نمط تصميم الجسر - 2هنا يمكنك رؤية بنيتين مستقلتين يمكن تعديلهما دون التأثير على وظائف بعضهما البعض. في حالتنا هذه:
  • التجريد هو Shapeالطبقة
  • RefinedAbstraction هو TriangleوالفئاتRectangle
  • المنفذ هو Colorالواجهة
  • ConcreteImplementor هو BlackColor، GreenColorوالفئات RedColor.
الفصل Shapeعبارة عن تجريد - آلية لإدارة ملء الأشكال بألوان مختلفة، والتي يتم تفويضها إلى الواجهة Color(المنفذ). والفئات Triangleهي Rectangleفئات محددة تستخدم الآلية التي يوفرها الفصل Shape. BlackColor، GreenColorوهي RedColorتطبيقات ملموسة في التسلسل الهرمي للتنفيذ.

مكان استخدام نمط الجسر

من المزايا الكبيرة لاستخدام هذا النمط أنه يمكنك إجراء تغييرات على الفئات الوظيفية في تسلسل هرمي واحد دون كسر منطق الآخر. كما يساعد هذا الأسلوب على تقليل الاقتران بين الفئات. الشرط الرئيسي عند استخدام هذا النمط هو "اتباع التعليمات" — لا تتجاهل أيًا منها! ولتحقيق هذه الغاية، دعونا نتعرف على المواقف التي يجب عليك فيها بالتأكيد استخدام نمط الجسر:
  1. إذا كنت بحاجة إلى توسيع عدد الكيانات بناءً على مجموعات من مفهومين (مثل الأشكال والألوان).

  2. إذا كنت ترغب في تقسيم فئة كبيرة لا تستوفي مبدأ المسؤولية الفردية إلى فئات أصغر ذات وظائف ضيقة.

  3. إذا كان من الضروري إجراء تغييرات على منطق كيانات معينة أثناء تشغيل البرنامج.

  4. إذا كان من الضروري إخفاء التنفيذ عن عملاء الفصل أو المكتبة.

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

إيجابيات وسلبيات النمط

مثل الأنماط الأخرى، للجسر مزايا وعيوب. مزايا نمط الجسر:
  1. فهو يعمل على تحسين قابلية تطوير التعليمات البرمجية — حيث يمكنك إضافة وظائف دون الخوف من كسر شيء ما في جزء آخر من البرنامج.
  2. فهو يقلل من عدد الفئات الفرعية عندما يعتمد عدد الكيانات على مجموعات من مفهومين (على سبيل المثال، الأشكال والألوان).
  3. إنه يجعل من الممكن العمل بشكل منفصل على تسلسلين هرميين منفصلين – التجريد والتنفيذ. يمكن لمطورين مختلفين إجراء تغييرات دون الخوض في تفاصيل التعليمات البرمجية الخاصة بكل منهما.
  4. فهو يقلل من الاقتران بين الفئات - المكان الوحيد الذي تقترن فيه الفئتان هو الجسر (أي الحقل Color color).
عيوب نمط الجسر:
  1. اعتمادًا على الموقف المحدد والبنية العامة للمشروع، قد يؤثر ذلك سلبًا على أداء البرنامج (على سبيل المثال، إذا كنت بحاجة إلى تهيئة المزيد من الكائنات).
  2. فهو يجعل التعليمات البرمجية أقل قابلية للقراءة بسبب الحاجة إلى التبديل بين الفئتين.

الفرق من نمط الاستراتيجية

غالبًا ما يتم الخلط بين نمط الجسر ونمط تصميم آخر - وهو النمط الاستراتيجي. كلاهما يستخدم التركيب (على الرغم من أننا استخدمنا التجميع في المثال مع الأشكال والألوان، يمكن أن يستخدم نمط Bridge أيضًا التركيب)، مما يؤدي إلى تفويض العمل إلى كائنات أخرى. ولكن هناك فرق بينهما، وهو كبير. نمط الإستراتيجية هو نمط سلوكي: فهو يحل مشاكل مختلفة تمامًا. تسمح الإستراتيجية بتبادل الخوارزميات، بينما يفصل الجسر بين التجريد والتطبيقات من أجل الاختيار بين التطبيقات المختلفة. بمعنى آخر، على عكس الإستراتيجية، ينطبق الجسر على كيانات بأكملها أو هياكل هرمية. يمكن أن يكون نمط الجسر سلاحًا جيدًا في ترسانة المطور. الشيء الرئيسي هو تحديد المواقف التي تستحق استخدامها والتعرف عندما يكون هناك نمط آخر مناسبًا. إذا لم تكن على دراية بالأنماط الأخرى، فاقرأ المقالات التالية:
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION