הפיכת קלט לאובייקט?

Metheny

Member
הפיכת קלט לאובייקט?

(java) נגיד שיש לי הרבה קלאסים שיורשים מאב אחד. אני מקבל קלט מהמשתמש, ואני רוצה להפוך אותו לאובייקט המתאים? (אם כל קלט מתאים לאובייקט מסויים) יש דרך יעילה לעשות את זה בלי אינסוף תנאים?
 
בערך.

יש כמות תנאים מינימלית שתצטרך לבדוק בכל מקרה. אבל באופן כללי, אתה יכול לבנות FACTORY, עם היכולת לבנות אובייקטים מקלט. כמובן שעל הקלט להכיל איכשהו את סוג האובייקט שאותו אתה אמור לייצר, אבל אני מניח שזה כבר המצב אצלך. זה העיקרון: ל-FACTORY תהיה יכולת לבצע "צור אובייקט מקובץ/קלט/WHATEVER". ה-FACTORY יקרא את הקלט ויזהה את האובייקט לפי שם/מספר/מה שהחלטת להשתמש. נקרא למידע הזה "מפתח" לצורך העניין. לפי המפתח הזה, ה-FACTORY יצור אובייקט חדש מהמחלקה המתאימה, כאשר עדיף במקרה הזה שהאובייקט יבנה את עצמו (כלומר על האובייקט להיות מסוגל "למלא" את עצמו מתוך קלט אחרי שה-FACTORY יצר אותו). השאלה, כמובן, היא איך לזהות כמה שיותר מהר את האובייקט. אופציות מקובלות הן HASH TABLE, עץ מאוזן, או סתם מערך, שבו האינדקסים משמשים כמספר זיהוי. אתה צריך לבחור את השיטה בהתאם לטיפוס המפתח (מספר, מחרוזת, וכו'), טווח ערכי המפתח וכמות המחלקות המעורבות. את מבנה הנתונים הנ"ל יש לאתחל יחד עם ה-FACTORY. אפשר פשוט לכתוב קוד איתחול בתוך ה-CTOR של ה-FACTORY, אבל אפשר גם לגרום לכל מחלקה "לרשום" את עצמה בתוך ה-FACTORY. למעשה, כל מחלקה רושמת "סוכן" שלה בתוך ה-FACTORY. הסוכן, במידה וה-FACTORY מחליט להפעיל אותו, יוצר אובייקט מסוג המחלקה שאליה הוא משוייך. סוכנים אלה נקראים CREATORS.
 
למעלה