|
|
|
המטרה:
הגדרת תלות בין אובייקט למספר אובייקטים, כך שכאשר אובייקט אחד משנה את מצבו כל האובייקטים התלויים בו מיודעים ומתעדכנים אוטומטית.
ידועה גם בתור: Dependents, Publish-Subscribe
מוטיבציה:
כאשר מחלקים מערכת לאוסף של class ים שמשתפים פעולה, בעיה נפוצה היא לשמור על קונסיסטנטיות בין אובייקטים שמתייחסים אחד לשני (למשל לשמור על אובייקט מעודכן בכל מה שהשתנה אצל האובייקטים שהוא בא במגע איתם). מצד שני, לא נרצה לשמור על קונסיסטנטיות במחיר של
coupling הדוק מדי, כי אם אובייקטים תלויים מדי אחד בשני זה מקטין את האפשרות לעשות בהם שימוש חוזר בהקשרים אחרים.
הפתרון:
לדוגמה, הרבה ערכות GUI (ממשק משתמש גרפי) מוכנות מבצעות הפרדה בין החלקים שקשורים לייצוג הגרפי של הממשק ובין החלקים שקשורים ל data של האפליקציה מתחת. בתוך האפליקציה ה
class ים שקשורים לחלק של הייצוג הגרפי עובדים בשיתוף פעולה עם ה
class ים שקשורים לחלק של הdata של האפליקציה מתחת. מחוץ לאפליקציה אותם
class ים ניתנים לשימוש חוזר בהקשרים אחרים (reuse).
גם אובייקט של גיליון אלקטרוני וגם אובייקט של תרשים גרף קוביות יכולים להציג את אותו המידע שמופיע באובייקט מסוים שמחזיק נתונים (data) תוך שימוש בצורות שונות להצגה. הגיליון האלקטרוני והגרף לא מכירים אחד את השני, ולכן אנו יכולים לבצע בהם שימוש ללא קשר אחד לשני, וגם לבצע בהם שימוש חוזר, כל אחד בנפרד, בהקשרים שונים אחרים (reuse). אבל הם
מתנהגים כאילו שהם קשורים אחד לשני ומכירים אחד את השני. כאשר המשתמש משנה את הנתונים בגיליון האלקטרוני הנתונים משתנים בגרף באופן מיידי, ולהפך.
|
לחץ להגדלה - observer בצורה ציורית
|
הגיליון והגרף תלויים באובייקט שמחזיק את הנתונים ולכן אמורים להיות מיודעים על כל שינוי במצבו. כמובן, מספר האובייקטים התלויים בו יכול להיות גדול משנים. אפשר להחזיק מספר גדול ככל שנרצה של ממשקים לייצוג מידע מסוים.
ה observer pattern מתארת איך לקיים מערכת יחסים מורכבת ומעניינת, מותחת ומפתיעה בעלת עליות וירידות בין האובייקטים השונים... האובייקטים העיקריים במשחק הם ה
subject וה observer . לsubject יכול להיות מספר כלשהו של observer ים שתלויים בו. כל הobserver ים מיודעים כאשר ה subject עובר שינוי כלשהו במצבו. בתגובה, כל observer יפנה לsubject ויסנכרן את מצבו בהתאמה עם מצבו החדש של ה subject. אכן, מערכת יחסים מעניינת...
האינטראקציה הזו ידועה גם בשם publish-subscribe. האובייקט מפרסם הודעות (publish) מבלי לדעת אפילו לכמה אובייקטים. מספר כלשהו של אובייקטים יכול להירשם (subscribe) כדי לקבל הודעות.
|
|
|
|