ÓÑÇéÌáʾ£ºÈç¹û±¾ÍøÒ³´ò¿ªÌ«Âý»òÏÔʾ²»ÍêÕû£¬Çë³¢ÊÔÊó±êÓÒ¼ü¡°Ë¢Ð¡±±¾ÍøÒ³£¡
Java±à³Ì˼ÏëµÚ4°æ[ÖÐÎÄ°æ](PDF¸ñʽ)-µÚ144²¿·Ö
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿! Èç¹û±¾ÊéûÓÐÔĶÁÍ꣬ÏëÏ´μÌÐø½Ó×ÅÔĶÁ£¬¿ÉʹÓÃÉÏ·½ "Êղص½ÎÒµÄä¯ÀÀÆ÷" ¹¦ÄÜ ºÍ "¼ÓÈëÊéÇ©" ¹¦ÄÜ£¡
¡¡¡¡
//¡¡Specific¡¡group¡¡of¡¡algorithms¡¡packaged¡¡¡¡
//¡¡in¡¡each¡¡implementation¡¡of¡¡Visitor£º¡¡¡¡
class¡¡PriceVisitor¡¡implements¡¡Visitor¡¡£û¡¡¡¡
¡¡¡¡private¡¡double¡¡alSum£»¡¡//¡¡Aluminum¡¡¡¡
¡¡¡¡private¡¡double¡¡pSum£»¡¡//¡¡Paper¡¡¡¡
¡¡¡¡private¡¡double¡¡gSum£»¡¡//¡¡Glass¡¡¡¡
¡¡¡¡private¡¡double¡¡cSum£»¡¡//¡¡Cardboard¡¡¡¡
¡¡¡¡public¡¡void¡¡visit£¨VAluminum¡¡al£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡double¡¡v¡¡=¡¡al¡£weight£¨£©¡¡*¡¡al¡£value£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨value¡¡of¡¡Aluminum=¡¡¡¨¡¡£«¡¡v£©£»¡¡¡¡
¡¡¡¡¡¡¡¡alSum¡¡£«=¡¡v£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡visit£¨VPaper¡¡p£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡double¡¡v¡¡=¡¡p¡£weight£¨£©¡¡*¡¡p¡£value£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨value¡¡of¡¡Paper=¡¡¡¨¡¡£«¡¡v£©£»¡¡¡¡
¡¡¡¡¡¡¡¡pSum¡¡£«=¡¡v£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡visit£¨VGlass¡¡g£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡double¡¡v¡¡=¡¡g¡£weight£¨£©¡¡*¡¡g¡£value£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨value¡¡of¡¡Glass=¡¡¡¨¡¡£«¡¡v£©£»¡¡¡¡
¡¡¡¡¡¡¡¡gSum¡¡£«=¡¡v£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡visit£¨VCardboard¡¡c£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡double¡¡v¡¡=¡¡c¡£weight£¨£©¡¡*¡¡c¡£value£¨£©¡¡£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨value¡¡of¡¡Cardboard¡¡=¡¡¡¨¡¡£«¡¡v£©£»¡¡¡¡
¡¡¡¡¡¡¡¡cSum¡¡£«=¡¡v£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡void¡¡total£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡616¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡618¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨Total¡¡Aluminum£º¡¡¡¨¡¡£«¡¡alSum¡¡£«¡¡¡¨n¡¨¡¡£«¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨Total¡¡Paper£º¡¡¡¨¡¡£«¡¡pSum¡¡£«¡¡¡¨n¡¨¡¡£«¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨Total¡¡Glass£º¡¡¡¨¡¡£«¡¡gSum¡¡£«¡¡¡¨n¡¨¡¡£«¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¨Total¡¡Cardboard£º¡¡¡¨¡¡£«¡¡cSum£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
class¡¡WeightVisitor¡¡implements¡¡Visitor¡¡£û¡¡¡¡
¡¡¡¡private¡¡double¡¡alSum£»¡¡//¡¡Aluminum¡¡¡¡
¡¡¡¡private¡¡double¡¡pSum£»¡¡//¡¡Paper¡¡¡¡
¡¡¡¡private¡¡double¡¡gSum£»¡¡//¡¡Glass¡¡¡¡
¡¡¡¡private¡¡double¡¡cSum£»¡¡//¡¡Cardboard¡¡¡¡
¡¡¡¡public¡¡void¡¡visit£¨VAluminum¡¡al£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡alSum¡¡£«=¡¡al¡£weight£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨weight¡¡of¡¡Aluminum¡¡=¡¡¡¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£«¡¡al¡£weight£¨£©£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡visit£¨VPaper¡¡p£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡pSum¡¡£«=¡¡p¡£weight£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨weight¡¡of¡¡Paper¡¡=¡¡¡¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£«¡¡p¡£weight£¨£©£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡visit£¨VGlass¡¡g£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡gSum¡¡£«=¡¡g¡£weight£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨weight¡¡of¡¡Glass¡¡=¡¡¡¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£«¡¡g¡£weight£¨£©£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡void¡¡visit£¨VCardboard¡¡c£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡cSum¡¡£«=¡¡c¡£weight£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨weight¡¡of¡¡Cardboard¡¡=¡¡¡¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£«¡¡c¡£weight£¨£©£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡void¡¡total£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Total¡¡weight¡¡Aluminum£º¡¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£«¡¡alSum£©£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Total¡¡weight¡¡Paper£º¡¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£«¡¡pSum£©£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Total¡¡weight¡¡Glass£º¡¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£«¡¡gSum£©£»¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Total¡¡weight¡¡Cardboard£º¡¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£«¡¡cSum£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
public¡¡class¡¡TrashVisitor¡¡£û¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String£§£§¡¡args£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡Vector¡¡bin¡¡=¡¡new¡¡Vector£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡ParseTrash¡¡still¡¡works£»¡¡without¡¡changes£º¡¡¡¡
¡¡¡¡¡¡¡¡ParseTrash¡£fillBin£¨¡¨VTrash¡£dat¡¨£»¡¡bin£©£»¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡You¡¡could¡¡even¡¡iterate¡¡through¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡a¡¡list¡¡of¡¡visitors£¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡617¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡619¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡PriceVisitor¡¡pv¡¡=¡¡new¡¡PriceVisitor£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡WeightVisitor¡¡wv¡¡=¡¡new¡¡WeightVisitor£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡Enumeration¡¡it¡¡=¡¡bin¡£elements£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡while£¨it¡£hasMoreElements£¨£©£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡Visitable¡¡v¡¡=¡¡£¨Visitable£©it¡£nextElement£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡v¡£accept£¨pv£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡v¡£accept£¨wv£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡pv¡£total£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡wv¡£total£¨£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡///£º~¡¡¡¡
¡¡¡¡
×¢Òâmain£¨£©µÄÐÎ×´ÒÑÔٴη¢ÉúÁ˱仯¡£ÏÖÔÚÖ»ÓÐÒ»¸öÀ¬»ø£¨Trash£©Í²¡£Á½¸öVisitor¡¡¶ÔÏó±»½ÓÊÕµ½ÐòÁÐÖС¡
µÄÿ¸öÔªËØÄÚ£¬ËüÃÇ»áÍê³É×Ô¼º·ÝÄڵŤ×÷¡£Visitor¡¡¸ú×ÙËüÃÇ×Ô¼ºµÄÄÚ²¿Êý¾Ý£¬¼ÆËã³ö×ÜÖغͼ۸ñ¡£¡¡¡¡
×îºÃ£¬½«¶«Î÷´ÓÐòÁÐÖÐÈ¡³öµÄʱºò£¬³ýÁ˲»¿É±ÜÃâµØÏòTrash¡¡ÔìÐÍÒÔÍ⣬ÔÙûÓÐÔËÐÐÆÚµÄÀàÐÍÑéÖ¤¡£ÈôÔÚ¡¡
Java¡¡ÀïʵÏÖÁ˲ÎÊý»¯ÀàÐÍ£¬ÉõÖÁÄǸöÔìÐͲÙ×÷Ò²¿ÉÒÔ±ÜÃâ¡£¡¡¡¡
¶Ô±È֮ǰ½éÉܹýµÄË«ÖØÅÉDz·½°¸£¬Çø·ÖÕâÁ½ÖÖ·½°¸µÄÒ»¸ö°ì·¨ÊÇ£ºÔÚË«ÖØÅÉDz·½°¸ÖУ¬Ã¿¸ö×ÓÀà´´½¨Ê±Ö»»á¡¡
¹ýÔØÆäÖеÄÒ»¸ö¹ýÔØ·½·¨£¬¼´¡¡add£¨£©¡£¶øÔÚÕâÀÿ¸ö¹ýÔصÄvisit£¨£©·½·¨¶¼±ØÐëÔÚ¡¡Visitor¡¡µÄÿ¸ö×ÓÀàÖнø¡¡
ÐйýÔØ¡£¡¡¡¡
¡¡¡¡
1¡£¡¡¸ü¶àµÄ½áºÏ£¿¡¡¡¡
ÕâÀﻹÓÐÆäËûÐí¶à´úÂ룬Trash¡¡½á¹¹ºÍ¡¡Visitor¡¡½á¹¹Ö®¼ä´æÔÚ×ÅÃ÷ÏԵġ°½áºÏ¡±£¨Coupling¡¡£©¹Øϵ¡£È»¶ø£¬¡¡
ÔÚËüÃÇËù´ú±íµÄÀ༯ÄÚ²¿£¬Ò²´æÔÚן߶ȵÄÄý¾ÛÁ¦£º¶¼Ö»×öÒ»¼þÊÂÇ飨Trash¡¡ÃèÊöÀ¬»ø»ò·ÏÆ·£¬¶øVisitor¡¡
ÃèÊö¶ÔÀ¬»ø²ÉȡʲôÐж¯£©¡£×÷ΪһÌ×ÓÅÐãµÄÉè¼Æ·½°¸£¬ÕâÎÞÒÉÊǸöÁ¼ºÃµÄ¿ª¶Ë¡£µ±È»¾ÍÄ¿Ç°µÄÇé¿öÀ´Ëµ£¬¡¡
Ö»ÓÐÔÚÎÒÃÇÌí¼ÓеÄVisitor¡¡ÀàÐÍʱ²ÅÄÜÌå»áµ½ËüµÄºÃ´¦¡£µ«ÔÚÌí¼ÓÐÂÀàÐ͵ÄTrash¡¡Ê±£¬ËüÈ´ÏÔµÃÓÐЩ°ÊÖ¡¡
°½Å¡£¡¡¡¡
ÀàÓëÀàÖ®¼äµÍ¶ÈµÄ½áºÏÓëÀàÄڸ߶ȵÄÄý¾ÛÎÞÒÉÊÇÒ»¸öÖØÒªµÄÉè¼ÆÄ¿±ê¡£µ«Ö»ÒªÉÔ²»ÁôÉñ£¬¾Í¿ÉÄÜ·Á°ÎÒÃǵá¡
µ½Ò»¸ö±¾¸Ã¸ü³öÉ«µÄÉè¼Æ¡£´Ó±íÃæ¿´£¬ÓÐЩÀ಻¿É±ÜÃâµØÏ໥¼ä´æÔÚ×ÅһЩ¡°Ç×ÃÜ¡±¹Øϵ¡£ÕâÖÖ¹Øϵͨ³£ÊÇ¡¡
³É¶Ô·¢ÉúµÄ£¬¿ÉÒÔ½Ð×÷¡°¶ÔÁª¡±£¨Couplet£©¡ª¡ª±ÈÈ缯ºÏºÍ¼Ì³ÐÆ÷£¨Enumeration£©¡£Ç°ÃæµÄTrash
Visitor¡¡¶ÔËƺõÒ²ÊÇÕâÑùµÄÒ»ÖÖ¡°¶ÔÁª¡±¡£¡¡¡¡
16¡£8¡¡RTTI¡¡ÕæµÄÓк¦Âð¡¡¡¡
±¾Õµĸ÷ÖÖÉè¼Æ·½°¸¶¼ÔÚŬÁ¦±ÜÃâʹÓÃRTTI£¬Õâ»òÐí»á¸ø´ó¼ÒÁôÏ¡°RTTI¡¡Óк¦¡±µÄÓ¡Ï󣨻¹¼ÇµÃ¿ÉÁ¯µÄ¡¡
goto¡¡Âð£¬ÓÉÓÚ¸øÈËÓ¡Ï󲻼ѣ¬¸ù±¾¾ÍûÓзŵ½Java¡¡ÀïÀ´£©¡£µ«Êµ¼ÊÇé¿ö²¢·Ç¾ø¶ÔÈç´Ë¡£ÕýÈ·µØ˵£¬Ó¦¸ÃÊÇ¡¡
RTTI¡¡Ê¹Óò»µ±²Å¡°Óк¦¡±¡£ÎÒÃÇÖ®ËùÒÔÏë±ÜÃâ¡¡RTTI¡¡µÄʹÓã¬ÊÇÓÉÓÚËüµÄ´íÎóÔËÓûáÔì³ÉÀ©Õ¹ÐÔÊܵ½Ë𺦡£¡¡
¶øÎÒÃÇÊÂÇ°Ìá³öµÄÄ¿±ê¾ÍÊÇÄÜÏòϵͳ×ÔÓɼÓÈëÐÂÀàÐÍ£¬Í¬Ê±±£Ö¤¶ÔÖÜΧµÄ´úÂëÔì³É¾¡¿ÉÄÜСµÄÓ°Ïì¡£ÓÉÓÚ¡¡
RTTI¡¡³£±»ÀÄÓã¨ÈÃËü²éÕÒϵͳÖеÄÿһÖÖÀàÐÍ£©£¬»áÔì³É´úÂëµÄÀ©Õ¹ÄÜÁ¦´ó´òÕÛ¿Û¡ª¡ªÌí¼ÓÒ»ÖÖÐÂÀàÐÍʱ£¬¡¡
±ØÐëÕÒ³öʹÓÃÁËRTTI¡¡µÄËùÓдúÂë¡£¼´Ê¹½öÒÅ©ÁËÆäÖеÄÒ»¸ö£¬Ò²²»ÄÜ´Ó±àÒëÆ÷ÄÇÀïµÃµ½ÈκΰïÖú¡£¡¡¡¡
È»¶ø£¬RTTI¡¡±¾Éí²¢²»»á×Ô¶¯²úÉú·ÇÀ©Õ¹ÐԵĴúÂë¡£ÈÃÎÒÃÇÔÙÀ´¿´Ò»¿´Ç°ÃæÌáµ½µÄÀ¬»ø»ØÊÕÀý×Ó¡£ÕâÒ»´Î×¼±¸¡¡
ÒýÈëÒ»ÖÖй¤¾ß£¬ÎÒ°ÑËü½Ð×÷TypeMap¡£ÆäÖаüº¬ÁËÒ»¸öHashtable¡¡£¨É¢ÁÐ±í£©£¬ÆäÖÐÈÝÄÉÁ˶à¸öVector£¬¡¡
µ«½Ó¿Ú·Ç³£¼òµ¥£º¿ÉÒÔÌí¼Ó£¨add£¨£©£©Ò»¸öжÔÏ󣬿ÉÒÔ»ñµÃ£¨get£¨£©£©Ò»¸öVector£¬ÆäÖаüº¬ÁËÊôÓÚijÖÖÌØ¡¡
¶¨ÀàÐ͵ÄËùÓжÔÏ󡣶ÔÓÚÕâ¸ö°üº¬µÄÉ¢ÁÐ±í£¬ËüµÄ¹Ø¼üÔÚÓÚ¶ÔÓ¦µÄVector¡¡ÀïµÄÀàÐÍ¡£ÕâÖÖÉè¼Æ·½°¸µÄÓŵ㡡
¡¡£¨¸ù¾ÝLarry¡¡O'Brien¡¡µÄ½¨Ò飩ÊÇÔÚÓöµ½Ò»ÖÖÐÂÀàÐ͵Äʱºò£¬TypeMap¡¡»á¶¯Ì¬¼ÓÈëÒ»ÖÖÐÂÀàÐÍ¡£ËùÒÔ²»¹Üʲ¡¡
ôʱºò£¬Ö»Òª½«Ò»ÖÖÐÂÀàÐͼÓÈëϵͳ£¨¼´Ê¹ÔÚÔËÐÐÆÚ¼äÌí¼Ó£©£¬ËüÒ²»áÕýÈ·ÎÞÎóµØµÃÒÔ½ÓÊÜ¡£¡¡¡¡
ÎÒÃǵÄÀý×ÓͬÑù½¨Á¢ÔÚ¡¡c16¡£Trash¡¡Õâ¸ö¡°°ü¡±£¨Package£©ÄÚµÄTrash¡¡ÀàÐͽṹµÄ»ù´¡ÉÏ£¨¶øÇÒÄǶùʹÓõġ¡
Trash¡£dat¡¡Îļþ¿ÉÒÔÕÕ°áµ½ÕâÀïÀ´£©¡£¡¡¡¡
¡¡¡¡
//£º¡¡DynaTrash¡£java¡¡¡¡¡¡
//¡¡Using¡¡a¡¡Hashtable¡¡of¡¡Vectors¡¡and¡¡RTTI¡¡¡¡
//¡¡to¡¡automatically¡¡sort¡¡trash¡¡into¡¡¡¡
//¡¡vectors¡£¡¡This¡¡solution£»¡¡desp¡¡ite¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡618¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡620¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
//¡¡use¡¡of¡¡RTTI£»¡¡is¡¡extensible¡£¡¡¡¡
package¡¡c16¡£dynatrash£»¡¡¡¡
import¡¡c16¡£trash¡£*£»¡¡¡¡
import¡¡java¡£util¡£*£»¡¡¡¡
¡¡¡¡
//¡¡Generic¡¡TypeMap¡¡works¡¡in¡¡any¡¡situation£º¡¡¡¡
class¡¡TypeMap¡¡£û¡¡¡¡
¡¡¡¡private¡¡Hashtable¡¡t¡¡=¡¡new¡¡Hashtable£¨£©£»¡¡¡¡
¡¡¡¡public¡¡void¡¡add£¨Object¡¡o£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡Class¡¡type¡¡=¡¡o¡£getClass£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡if£¨t¡£containsKey£¨type£©£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡£¨£¨Vector£©t¡£get£¨type£©£©¡£addElement£¨o£©£»¡¡¡¡
¡¡¡¡¡¡¡¡else¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡Vector¡¡v¡¡=¡¡new¡¡Vector£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡v¡£addElement£¨o£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡t¡£put£¨type£»v£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡Vector¡¡get£¨Class¡¡type£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡return¡¡£¨Vector£©t¡£get£¨type£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡Enumeration¡¡keys£¨£©¡¡£û¡¡return¡¡t¡£keys£¨£©£»¡¡£ý¡¡¡¡
¡¡¡¡//¡¡Returns¡¡handle¡¡to¡¡adapter¡¡class¡¡to¡¡allow¡¡¡¡
¡¡¡¡//¡¡callbacks¡¡from¡¡ParseTrash¡£fillBin£¨£©£º¡¡¡¡
¡¡¡¡public¡¡Fillable¡¡filler£¨£©¡¡£û¡¡¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡Anonymous¡¡inner¡¡class£º¡¡¡¡
¡¡¡¡¡¡¡¡return¡¡new¡¡Fillable£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡public¡¡void¡¡addTrash£¨Trash¡¡t£©¡¡£û¡¡add£¨t£©£»¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡£ý£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
public¡¡class¡¡DynaTrash¡¡£û¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡main£¨String£§£§¡¡args£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡TypeMap¡¡bin¡¡=¡¡new¡¡TypeMap£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡ParseTrash¡£fillBin£¨¡¨Trash¡£dat¡¨£»bin¡£filler£¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡Enumeration¡¡keys¡¡=¡¡bin¡£keys£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡while£¨keys¡£hasMoreElements£¨£©£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡Trash¡£sumValue£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡bin¡£get£¨£¨Class£©keys¡£nextElement£¨£©£©£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡///£º~¡¡¡¡
¡¡¡¡
¾¡¹Ü¹¦ÄܺÜÇ¿£¬µ«¶ÔTypeMap¡¡µÄ¶¨ÒåÊǷdz£¼òµ¥µÄ¡£ËüÖ»ÊÇ°üº¬ÁËÒ»¸öÉ¢ÁÐ±í£¬Í¬Ê±add£¨£©¸ºµ£Á˴󲿷ֵġ¡
¹¤×÷¡£Ìí¼ÓÒ»¸öÐÂÀàÐÍʱ£¬ÄÇÖÖÀàÐ͵ÄClass¡¡¶ÔÏóµÄ¾ä±ú»á±»ÌáÈ¡³öÀ´¡£Ëæºó£¬ÀûÓÃÕâ¸ö¾ä±úÅжÏÈÝÄÉÁËÄÇ¡¡
Àà¶ÔÏóµÄÒ»¸öVector¡¡ÊÇ·ñÒÑ´æÔÚÓÚÉ¢ÁбíÖС£Èç´ð°¸Êǿ϶¨µÄ£¬¾ÍÌáÈ¡³öÄǸö¡¡Vector£¬²¢½«¶ÔÏó¼ÓÈëÆä¡¡
ÖУ»·´Ö®£¬¾Í½«Class¡¡¶ÔÏó¼°ÐÂVector¡¡×÷Ϊһ¸ö¡°¼ü£Öµ¡±¶Ô¼ÓÈë¡£¡¡¡¡
ÀûÓÃkeys£¨£©¡¡£¬¿ÉÒԵõ½¶ÔËùÓÐClass¡¡¶ÔÏóµÄÒ»¸ö¡°Ã¶¾Ù¡±£¨Enumeration£©£¬¶øÇÒ¿ÉÓÃget£¨£©£¬¿Éͨ¹ýClass¡¡
¶ÔÏó»ñÈ¡¶ÔÓ¦µÄVector¡£¡¡¡¡
filler£¨£©·½·¨·Ç³£ÓÐȤ£¬ÒòΪËüÀûÓÃÁË¡¡ParseTrash¡£fillBin£¨£©µÄÉè¼Æ¡ª¡ª²»½öÄܳ¢ÊÔÌî³äÒ»¸öVector£¬Ò²ÄÜ¡¡
ÓÃËüµÄ¡¡addTrash£¨£©·½·¨ÊÔ×ÅÌî³äʵÏÖÁË¡¡Fillable¡¡£¨¿ÉÌî³ä£©½Ó¿ÚµÄÈκζ«Î÷¡£filter£¨£©¡¡ÐèÒª×öµÄÈ«²¿ÊÂÇé¾Í¡¡
Êǽ«Ò»¸ö¾ä±ú·µ»Ø¸øʵÏÖÁËFillable¡¡µÄÒ»¸ö½Ó¿Ú£¬È»ºó½«Õâ¸ö¾ä±ú×÷Ϊ²ÎÊý´«µÝ¸ø¡¡fillBin£¨£©£¬¾ÍÏóÏÂÃæÕâ¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡619¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡621¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
Ñù£º¡¡¡¡
ParseTrash¡£fillBin£¨¡¨Trash¡£dat¡¨£»¡¡bin¡£filler£¨£©£©£»¡¡¡¡
Ϊ²úÉúÕâ¸ö¾ä±ú£¬ÎÒÃDzÉÓÃÁËÒ»¸ö¡°ÄäÃûÄÚ²¿Àࡱ£¨ÒÑÔÚµÚ7¡¡Õ½²Êö£©¡£ÓÉÓÚ¸ù±¾²»ÐèÒªÓÃÒ»¸öÒÑÃüÃûµÄÀà¡¡
À´ÊµÏÖFillable¡¡£¬Ö»ÐèÒªÊôÓÚÄǸöÀàµÄÒ»¸ö¶ÔÏóµÄ¾ä±ú¼´¿É£¬ËùÒÔÕâÀïʹÓÃÄäÃûÄÚ²¿ÀàÊǷdz£Ç¡µ±µÄ¡£¡¡¡¡
¶ÔÕâ¸öÉè¼Æ£¬Òª×¢ÒâµÄÒ»¸öµØ·½ÊǾ¡¹ÜûÓÐÉè¼Æ³É¶Ô¹éÀà¼ÓÒÔ¿ØÖÆ£¬µ«ÔÚ¡¡fillBin£¨£©Ã¿´Î½øÐйéÀàµÄʱºò£¬¡¡
¶¼»á½«Ò»¸ö¡¡Trash¡¡¶ÔÏó²åÈë¡¡bin¡£¡¡¡¡
ͨ¹ýÇ°ÃæÄÇЩÀý×ÓµÄѧϰ£¬DynaTrash¡¡ÀàµÄ´ó¶àÊý²¿·Ö¶¼Ó¦µ±·Ç³£ÊìϤÁË¡£ÕâÒ»´Î£¬ÎÒÃDz»ÔÙ½«Ðµġ¡Trash¡¡
¶ÔÏóÖÃÈëÀàÐÍVector¡¡µÄÒ»¸öbin¡¡ÄÚ¡£ÓÉÓÚbin¡¡µÄÀàÐÍΪTypeMap£¬ËùÒÔ½«À¬»ø£¨Trash£©¶ª½øÀ¬»øͲ£¨Bin£©¡¡
µÄʱºò£¬TypeMap¡¡µÄÄÚ²¿¹éÀà»úÖÆ»áÁ¢¼´½øÐÐÊʵ±µÄ·ÖÀà¡£ÔÚTypeMap¡¡Àï±éÀú²¢¶Ôÿ¸ö¶ÀÁ¢µÄ¡¡Vector¡¡½øÐв١¡
×÷£¬ÕâÊÇÒ»¼þÏ൱¼òµ¥µÄÊÂÇ飺¡¡¡¡
¡¡¡¡
¡¡¡¡¡¡¡¡Enumeration¡¡keys¡¡=¡¡bin¡£keys£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡while£¨keys¡£hasMoreElements£¨£©£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡Trash¡£sumValue£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡bin¡£get£¨£¨Class£©keys¡£nextElement£¨£©£©£©£»¡¡¡¡
¡¡¡¡
¾ÍÏó´ó¼Ò¿´µ½µÄÄÇÑù£¬ÐÂÀàÐÍÏòϵͳµÄ¼ÓÈë¸ù±¾²»»áÓ°Ïìµ½ÕâЩ´úÂ룬Ò಻»áÓ°ÏìTypeMap¡¡ÖеĴúÂë¡£ÕâÏÔ¡¡
È»Êǽâ¾öÎÊÌâ×îÔ²ÂúµÄ·½°¸¡£¾¡¹ÜËüȷʵÑÏÖØÒÀÀµ¡¡RTTI£¬µ«Çë×¢ÒâÉ¢ÁбíÖеÄÿ¸ö¼ü£Öµ¶Ô¶¼Ö»²éÕÒÒ»ÖÖÀà¡¡
ÐÍ¡£³ý´ËÒÔÍ⣬ÔÚÎÒÃÇÔö¼ÓÒ»ÖÖÐÂÀàÐ͵Äʱºò£¬²»»áÏÝÈë¡°Íü¼Ç¡±Ïòϵͳ¼ÓÈëÕýÈ·´úÂëµÄÞÏÞξ³µØ£¬ÒòΪ¸ù¡¡
±¾¾ÍûÓÐʲô´úÂëÐèÒªÌí¼Ó¡£¡¡¡¡
16¡£9¡¡×ܽᡡ¡¡
´Ó±íÃæ¿´£¬ÓÉÓÚÏó¡¡TrashVisitor¡£java¡¡ÕâÑùµÄÉè¼Æ°üº¬Á˱ÈÔçÆÚÉè¼ÆÊýÁ¿¸ü¶àµÄ´úÂ룬ËùÒÔ»áÁôÏÂЧÂʲ»¸ß¡¡
µÄÓ¡Ïó¡£ÊÔͼÓø÷ÖÖÉè¼Æ·½°¸´ïµ½Ê²Ã´Ä¿µÄÓ¦¸ÃÊÇÎÒÃÇ¿¼ÂǵÄÖص㡣Éè¼Æ·¶Ê½ÌرðÊʺϡ°½«·¢Éú±ä»¯µÄ¶«Î÷¡¡
Óë±£³Ö²»±äµÄ¶«Î÷¸ôÀ뿪¡±¡£¶ø¡°·¢Éú±ä»¯µÄ¶«Î÷¡±¿ÉÒÔ´ú±íÐí¶àÖֱ仯¡£Ö®ËùÒÔ·¢Éú±ä»¯£¬¿ÉÄÜÊÇÓÉÓڳ̡¡
Ðò½øÈëÒ»¸öл·¾³£¬»òÕßÓÉÓÚµ±Ç°»·¾³µÄһЩ¶«Î÷·¢ÉúÁ˱仯£¨ÀýÈç¡°Óû§Ï£ÍûÔÚÆÁÄ»Éϵ±Ç°ÏÔʾµÄͼʾÖС¡
Ìí¼ÓÒ»ÖÖеļ¸ºÎÐÎ×´¡±£©¡£»òÕß¾ÍÏó±¾ÕÂÃèÊöµÄÄÇÑù£¬±ä»¯¿ÉÄÜÊǶԴúÂëÖ÷ÌåµÄ²»¶Ï¸Ä½ø¡£¾¡¹Ü·ÏÆ··ÖÀà¡¡
ÒÔÇ°µÄÀý×ÓÇ¿µ÷ÁËÐÂÐÍTrash¡¡ÏòϵͳµÄ¼ÓÈ룬µ«TrashVisitor¡£java¡¡ÔÊÐíÎÒÃÇ·½±ãµØÌí¼Óй¦ÄÜ£¬Í¬Ê±²»»á¡¡
¶ÔTrash¡¡½á¹¹Ôì³É¸ÉÈÅ¡£TrashVisitor¡£java¡¡Àïȷʵ¶à³öÁËÐí¶à´úÂ룬µ«ÔÚ¡¡Visitor¡¡ÀïÌí¼Óй¦ÄÜÖ»ÐèÒª¼«¡¡
СµÄ´ú¼Û¡£Èç¹û¾³£¶¼Òª½øÐдËÀà»î¶¯£¬ÄÇô¶àһЩ´úÂëÒ²ÊÇÖµµÃµÄ¡£¡¡¡¡
±ä»¯ÐòÁеķ¢ÏÖ²¢·ÇÒ»¼þƽ³£Ê£»ÔÚ³ÌÐòµÄ³õʼÉè¼Æ³ǫ̈ÒÔÇ°£¬ÄÇЩ·ÖÎö¼ÒÒ»°ã²»¿ÉÄÜÔ¤²âµ½ÕâÖֱ仯¡£³ý¡¡
·Ç½øÈëÏîÄ¿Éè¼ÆµÄºóÆÚ£¬·ñÔòһЩ±ØÒªµÄÐÅÏ¢ÊDz»»áÏÔ¶³öÀ´µÄ£ºÓÐʱֻÓнøÈëÉè¼Æ»ò×îÖÕʵÏֽ׶Σ¬²ÅÄÜ¡¡
Ìå»áµ½¶Ô×Ô¼ºÏµÍ³Ò»¸ö¸üÉîÈë»ò¸ü²»Òײì¾õÐèÒª¡£Ìí¼ÓÐÂÀàÐÍʱ£¨ÕâÊÇ¡°»ØÊÕ¡±Àý×Ó×îÖ÷ÒªµÄÒ»¸öÖص㣩£¬¡¡
¿ÉÄÜ»áÒâʶµ½Ö»ÓÐ×Ô¼º½øÈëά»¤½×¶Î£¬¶øÇÒ¿ªÊ¼À©³äϵͳʱ£¬²ÅÐèÒªÒ»¸öÌض¨µÄ¼Ì³Ð½á¹¹¡£¡¡¡¡
ͨ¹ýÉè¼Æ·¶Ê½µÄѧϰ£¬´ó¼Ò¿ÉÌå»áµ½×îÖØÒªµÄÒ»¼þÊÂÇé¾ÍÊDZ¾ÊéÒ»Ö±ÐûÑïµÄÒ»¸ö¹Ûµã¡ª¡ª¶àÐÎÐÔÊÇOOP¡¡£¨Ãæ¡¡
Ïò¶ÔÏó³ÌÐòÉè¼Æ£©µÄÈ«²¿¡ª¡ªÒÑ·¢ÉúÁ˳¹µ×µÄ¸Ä±ä¡£»»¾ä»°Ëµ£¬ºÜÄÑ¡°»ñµÃ¡±¶àÐÎÐÔ£»¶øÒ»µ©»ñµÃ£¬¾ÍÐèÒª¡¡
³¢ÊÔ½«×Ô¼ºµÄËùÓÐÉè¼Æ¶¼ÔìÐ͵½Ò»¸öÌض¨µÄÄ£×ÓÀïÈ¥¡£¡¡¡¡
Éè¼Æ·¶Ê½Òª±íÃ÷µÄ¹ÛµãÊÇ¡°OOP¡¡²¢²»½ö½öͬ¶àÐÎÐÔÓйء±¡£Ó¦µ±Óë¡¡OOP¡¡Óй
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿!
ÎÂÜ°Ìáʾ£º ο´Ð¡ËµµÄͬʱ·¢±íÆÀÂÛ£¬Ëµ³ö×Ô¼ºµÄ¿´·¨ºÍÆäËüС»ï°éÃÇ·ÖÏíÒ²²»´íŶ£¡·¢±íÊéÆÀ»¹¿ÉÒÔ»ñµÃ»ý·ÖºÍ¾Ñé½±Àø£¬ÈÏÕæдԴ´ÊéÆÀ ±»²ÉÄÉΪ¾«ÆÀ¿ÉÒÔ»ñµÃ´óÁ¿½ð±Ò¡¢»ý·ÖºÍ¾Ñé½±ÀøŶ£¡