Visitor Pattern
כיצד אני פותר מצב בו המתודה ב-visitor שלי מקבלת יותר מארגומנט אחד? כלומר המימוש של accept באלמנטים עצמם אמור לקבל בנוסף ל-visitor ארגומנט נוסף כדי להפעיל את ה-visit שלו. דוגמא מהרשת:
כיצד אני פותר מצב בו המתודה ב-visitor שלי מקבלת יותר מארגומנט אחד? כלומר המימוש של accept באלמנטים עצמם אמור לקבל בנוסף ל-visitor ארגומנט נוסף כדי להפעיל את ה-visit שלו. דוגמא מהרשת:
interface Visitor { void visit(Gladiolus g); void visit(Runuculus r); void visit(Chrysanthemum c); } // The Flower hierarchy cannot be changed: interface Flower { void accept(Visitor v); } class Gladiolus implements Flower { public void accept(Visitor v) { v.visit(this);} } class Runuculus implements Flower { public void accept(Visitor v) { v.visit(this);} } class Chrysanthemum implements Flower { public void accept(Visitor v) { v.visit(this);} } // Add the ability to produce a string: class StringVal implements Visitor { String s; public String toString() { return s; } public void visit(Gladiolus g) { s = "Gladiolus"; } public void visit(Runuculus r) { s = "Runuculus"; } public void visit(Chrysanthemum c) { s = "Chrysanthemum"; } }
אזי בתוך כל אחד ממממשי ה-Flower, למשל Gladiolus אמור להתקבל ארגומנט נוסף למתודה visit. (כמובן שהחתימה שבתוך Visitor תשתנה בהתאם) אותו ארגומנט יתקבל ע"י קלאס נוסף שיפעיל את הקריאה ל-accept על אותו האלמנט. מקווה שאני ברור ושהפיתרון הוא בחזקת "אל תיתפס לדוגמה". לעניות דעתי ישנה בעייתיות באופן הנ"ל, שכן כל חתימה שונה ב-visitor מחייבת מתודה accept שונה במידה והעברת הפרמטרים נעשית כך, ואולי אין בכך בעיה? תודה.