דיון באובייקטי Listner מרובים
מודל נציגות האירוע יכולה לתמוך ברישום באובייקטי Listner מרובים באובייקט מקור event-generating אחד. המודל אף יכול לתמוך ברישום של אובייקטים ממחלקת Listner יחידה של event-generating. לבסוף המודל יכול לתמוך גם במגוון שילובים של השניים.
בשיעור קודם על “program-generateg events”, למדנו איך להשתמש במתודת ה add() של מחלקת AWTEventMulticaster כדי ליצור ולשמר רשימה של אובייקטי Listner רשומים. מתודה זו תומכת ביכולת לרשום אובייקטי Listner מרובים על קובץ מקור event-generating יחיד. כשאתה פונה אל מתודה לשיגור אירוע (למשל actionPerformed()) בהתייחסות לרשימה, האירוע משוגר אוטומטית לכל אובייקט Listner ברשימה.
לצערנו, אי אפשר להשתמש במתודת ה add() של מחלקת AWTEEventMulticaster באופן ישיר על מנת לשמר רשימה של אובייקטי Listener רשומים, עבור סוג אירוע חדשת כיוון שאין גירסת העמסת אופרטורים של מתודת הadd() שחתימתה מתאימה לסוג האירוע החדש.
דרך אחת ליצור ולשמר רשימת אובייקטי Listner כזו היא להתחיל בתרגיל תיכנות של מבני נתונים ברשימת עיבוד. מאחר ומבני נתונים אינם עיקר שיעור זה החלטתי לא לנקוט בגישה זו. אם ברצונך לראות כמה דוגמאות קוד המראות איך ליצור ולשמר רשימת אובייקטים רשומים משלך במצב דומה לזה, עבור לפרק 15 בספר Inside Java .
גישה נוספת שיכולה לעבוד, היא ליצור תת מחלקה של מחלקת AWTEventMulticaster ולהעמיס את מתודת add(). למתודה תהיה חתימה שתתאים לסוג האירועים החדש, כמובן שגוף המתודה שנעמיס עדיין יצטרך לספק את הקוד לעיבוד הרשימה, כך שזו תוכל להעשות מורכבת יותר. (אם אני אמצא את הזמן אני אנסה לעשות זאת ולעדכן את השיעור מאוחר יותר).
בינתיים עיקר שיעור זה על סוגי אירועים טיפוסיים יכולה להיות מומחשת במידה מספקת ע"י הגבלת מספר אובייקטי Listner, לאובייקט אחד עבור רשימת רישום אובייקטים. הגבלה זו קרוב לוודאי תספק אחוז סביר מהמקרים בעולם האמיתי. לכן החלטתי להמנע מסיבוך קוד ה list-processing בתוכנית לדוגמא שבשיעור זה, ע"י הגבלת מספר אובייקטי ה Listner, כפי שצויין קודם.