JavaRush /مدونة جافا /Random-AR /نمط تصميم الجسر

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

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

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

نمط الجسر هو نمط التصميم الهيكلي. أي أن مهمتها الرئيسية هي إنشاء بنية كاملة للفئات والكائنات. يحل Bridge هذه المشكلة عن طريق فصل فئة واحدة أو أكثر إلى تسلسلات هرمية منفصلة - التجريد والتنفيذ . إن التغيير في الوظيفة في تسلسل هرمي واحد لا يستلزم تغييرات في تسلسل هرمي آخر. يبدو كل شيء واضحًا، لكن في الواقع يبدو هذا التعريف واسعًا جدًا ولا يجيب على السؤال الرئيسي: "ما هو نمط الجسر؟" أعتقد أن هذا سيكون أسهل بالنسبة لك لمعرفة ذلك في الممارسة العملية. لنقم على الفور بتصميم مثال كلاسيكي لنمط الجسر. لدينا فئة مجردة 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تطبيقات محددة في فرع التنفيذ. غالبا ما يطلق عليهم منصة.

أين يتم استخدام نمط الجسر؟

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

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

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

  4. إذا لزم الأمر، قم بإخفاء التنفيذ عن عملاء الفئة (المكتبة).

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

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

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

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

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