JavaRush /בלוג Java /Random-HE /דפוס עיצוב גשר

דפוס עיצוב גשר

פורסם בקבוצה
שלום! אנו ממשיכים להבין נושא רחב ומאוד שימושי - תבניות עיצוב. היום נדבר על ברידג'. כמו דפוסים אחרים, Bridge משמשת לפתרון בעיות נפוצות שעמן מתמודד מפתח בעת תכנון ארכיטקטורת תוכנה. בואו ללמוד את התכונות שלו היום ולגלות איך להשתמש בו.

מהי תבנית הגשר?

תבנית הגשר היא תבנית עיצוב מבנית. כלומר, המשימה העיקרית שלו היא ליצור מבנה שלם של מחלקות ואובייקטים. Bridge פותר בעיה זו על ידי הפרדת מחלקה אחת או יותר להיררכיות נפרדות - הפשטה ויישום . שינוי בפונקציונליות בהיררכיה אחת אינו גורר שינויים בהיררכיה אחרת. הכל נראה ברור, אבל למעשה הגדרה זו נשמעת רחבה מאוד ואינה עונה על השאלה העיקרית: "מהו דפוס הגשר?" אני חושב שזה יהיה לך קל יותר להבין בפועל. בואו מיד דגמן דוגמה קלאסית לתבנית הגשר. יש לנו מחלקה מופשטת שמתארת ​​בדרך כלל דמות גיאומטרית: Shape
  • Shape.java

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

    כשנחליט להוסיף צורות משולש ומלבן, נקבל בירושה מהמחלקה Shape:

  • Rectangle.java:

    public class Rectangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
       }
    }
  • Triangle.java:

    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:
  • Color.java:

    public interface Color {
       void fillColor();
    }
  • BlackColor.java:

    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");
       }
    }

    כעת נוסיף שדה type Colorלמחלקה Shape- נקבל את הערך שלו בבנאי.

  • Shape.java:

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

    colorנשתמש במשתנה ביישום Shape. המשמעות היא שצורות יכולות כעת להשתמש בפונקציונליות של הממשק Color.

  • Rectangle.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