Bridge

7 בNovember 2012

אין תגובות

Bridge

הרעיון בתבנית Bridge הוא להפריד בין החוזה
לבין המימוש כך שלא יהיו תלויים זה בזה.

ז”א שאם יש לנו חוזה א’ ומולו מימוש ב’ אז ב’ לא יכיר את א’ אלא
שחקן חדש שייקרא ג’

יהווה את ערוץ הקשר ביניהם, וזאת בעצם התבנית.

תבנית ה”גשר” פחות נפוצה אולי בשימוש בעיקר משום שיש לנו
דרכים חדשות ליצור הפרדה

וחוסר תלות בין הגדרת ממשק לבין המימוש שלו. בעיקר עקב השימוש הנפוץ
בתבניות תכנון

כמו מודל שלש שכבות שיוצרים הפרדה וחוסר “תלות” בין חלקים
שונים בתכנית שלנו.

שימוש גיוני יכול להיות אם נצטרך להחליף מימוש של חוזה בזמן ריצה.

בואו נבנה דוגמא בסיסית שלב אחרי שלב:

1.     
נגדיר את
החוזה

public interface BridgePattern

    {

        void DoOperation();


     }                                                                                                                                                                                                                                                                                                                                                                                           

2.      נגדיר את לקוחות החוזה (2 מימוושים שונים)

 

public class BridgeImplementation1 : BridgePattern

    {

        public void DoOperation()

        {

            Console.WriteLine(“first
client..”
);

        }

    }

 

    public class BridgeImplementation2 : BridgePattern

    {

        public void DoOperation()

        {

            Console.WriteLine(“second
client..”
);

        }

    }

 

  3.

עד כאן זה פשוט. חוזה + מימוש, עכשיו נגיע לחלק המעניין: אני לא מריץ
את את אחד המימושים ישירות

אלא נעשה לו population  באמצעות צד ג’ עם פרופרטי שנותן גישה לעדכון
מיהו המימוש הנוכחי שאותו נריץ.

עכשיו אני יכול בזמן ריצה להחליף מימושים שונים על אותו חוזה,

כשהפעלת הפונקציה של האבסטרקציה תפעיל את המימוש הקונקרטי נכון לאותו
רגע בלי שיהיה איכפת

לנו מה רץ עכשיו, שכן כל תפקיד התבנית הוא לגשר ביו החוזה למימוש וזה
בדיוק מה שעשינו.

public class BridgeAbstraction

    {

 

        private BridgePattern _bridge;

       

        public BridgePattern Bridge

        {

            get { return _bridge; }

            set { _bridge = value; }

        }

 

   

        public void AbstractionOperation()

        {

            Console.Write(“Using  );

            _bridge.DoOperation();

        }


     

}                                                                                                                                                                                                                                                                                                                      


 4. (למי שממש מתעקש להגזור ולהדביק דוגמא מלאה)

class Program

    {

        static void Main(string[] args)

        {

            BridgeAbstraction abs = new BridgeAbstraction();

            BridgeImplementation1 imp1 = new BridgeImplementation1();

            BridgeImplementation2 imp2 = new BridgeImplementation2();

          

            abs.Bridge = imp1;

            abs.AbstractionOperation();

 

            abs.Bridge = imp2;

            abs.AbstractionOperation();

 

            Console.ReadLine();

 

        }

                                                                                

                                    

מן הראוי גם להוסיף שלא כל תקשורת בין שני רכיבי מערכת באמצעות רכיב
שלישי עונה על

 הגדרת התבנית, ונסביר:

 כרעיון כללי ניתן להרחיב את
התבנית למצב של התנהגות ולא דווקא של תכנון,

לדוגמא מבני ארכיטקטורה של UI  (MVP,MVVM
 , MVC)

שהתקשורת ביניהם נעשית דרך איזשהו קונטרולר הם מצב דומה לתבנית כפי ש

הוגדרה ע”י GOF  שכן התקשורת בין א’ לב’ נעשית דרך ג’  אולם ברור לנו שזאת דרך להפריד

בין שכבות שזה דבר מעולה אבל זא ממש לא קשור להפרדה בין חוזה לבין
מימוש קונקרטי.

 

 

הוסף תגובה
facebook linkedin twitter email

Leave a Reply

Your email address will not be published. Required fields are marked *