مرحبًا! نستمر في فهم موضوع واسع ومفيد للغاية - أنماط التصميم. اليوم سنتحدث عن الجسر. مثل الأنماط الأخرى، يعمل 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
عبارة عن جسر يربط بين تسلسلين هرميين منفصلين.
جهاز الجسر: ما هو التجريد والتنفيذ
دعونا نلقي نظرة على الرسم التخطيطي للفئة الذي يصف نمط الجسر: هنا يمكنك رؤية بنيتين مستقلتين يمكن تعديلهما دون التأثير على وظائف بعضهما البعض. وفي حالتنا هو:- التجريد - الطبقة
Shape
. - RefinedAbstraction - الطبقات
Triangle
,Rectangle
; - المنفذ - الواجهة
Color
; - ConcreteImplementor - الطبقات
BlackColor
وGreenColor
.RedColor
Shape
التجريد - وهي آلية للتحكم في تلوين الأشكال بألوان مختلفة، والتي تقوم بتفويض التنفيذ إلى الواجهة Color
. الفئات Triangle
هي Rectangle
كائنات حقيقية تستخدم الآلية التي يقدمها الفصل Shape
. BlackColor
و GreenColor
- RedColor
تطبيقات محددة في فرع التنفيذ. غالبا ما يطلق عليهم منصة.
أين يتم استخدام نمط الجسر؟
الميزة الكبيرة لاستخدام هذا النمط هي أنه يمكنك إجراء تغييرات على وظائف الفئات في فرع واحد دون كسر منطق فرع آخر. يساعد هذا الأسلوب أيضًا على تقليل اقتران فئات البرنامج. الشرط الرئيسي لاستخدام الأنماط هو "اتباع التعليمات": لا تلصقها في أي مكان! في الواقع، دعونا نتعرف على الحالات التي تحتاج فيها بالتأكيد إلى استخدام Bridge:-
إذا كان من الضروري توسيع عدد الكيانات في اتجاهين (الأشكال الهندسية، الألوان).
-
إذا كنت تريد تقسيم فئة كبيرة لا تستوفي مبدأ المسؤولية الفردية إلى فئات أصغر ذات وظائف ضيقة النطاق.
-
إذا كانت هناك حاجة محتملة لإجراء تغييرات على منطق تشغيل كيانات معينة أثناء تشغيل البرنامج.
-
إذا لزم الأمر، قم بإخفاء التنفيذ عن عملاء الفئة (المكتبة).
إيجابيات وسلبيات النمط
مثل الأنماط الأخرى، للجسر مزايا وعيوب. فوائد الجسر:- تحسين قابلية تطوير التعليمات البرمجية - يمكنك إضافة وظائف دون الخوف من كسر شيء ما في جزء آخر من البرنامج.
- يقلل عدد الفئات الفرعية - يعمل عندما يكون من الضروري توسيع عدد الكيانات في اتجاهين (على سبيل المثال، عدد الأشكال وعدد الألوان).
- يجعل من الممكن العمل بشكل منفصل على فرعين مستقلين للتجريد والتنفيذ - يمكن القيام بذلك بواسطة مطورين مختلفين دون الخوض في تفاصيل كود الآخر.
- تقليل اقتران الفئات - المكان الوحيد الذي يتم فيه توصيل فئتين هو الجسر (الحقل
Color color
).
- اعتمادًا على الموقف المحدد وهيكل المشروع ككل، قد يكون هناك تأثير سلبي على إنتاجية البرنامج (على سبيل المثال، إذا كانت هناك حاجة إلى تهيئة المزيد من الكائنات).
- يعقد إمكانية قراءة التعليمات البرمجية بسبب الحاجة إلى التنقل بين الفئات.
GO TO FULL VERSION