Java±à³Ì˼ÏëµÚ4°æ[ÖÐÎÄ°æ](PDF¸ñʽ)-µÚ154²¿·Ö
°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡
Ï󡪡ªÒѾÉÏËÝÔìÐ͵½Ò»¸öTrash¡¡¶ÔÏó¡£ÔÚ¡¶Design¡¡Patterns¡·ÖУ¬Ëü±»´ÖÂԵسƺôΪ¡°´´½¨·¶Ê½¡±¡£ÒªÔÚ¡¡
ÕâÀïÓ¦ÓõÄÌØÊⷶʽÊÇ¡¡Factory¡¡·½·¨µÄÒ»ÖÖ±äÌå¡£ÔÚÕâÀFactory¡¡·½·¨ÊôÓÚ¡¡Trash¡¡µÄÒ»Ãûstatic¡¡£¨¾²Ì¬£©¡¡
³ÉÔ±¡£µ«¸ü³£¼ûµÄÒ»ÖÖÇé¿öÊÇ£ºËüÊôÓÚÑÜÉúÀàÖÐÒ»¸ö±»¹ýÔصķ½·¨¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡595¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡597¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
Factory¡¡·½·¨µÄ»ù±¾ÔÀíÊÇÎÒÃǽ«´´½¨¶ÔÏóËùÐèµÄ»ù±¾ÐÅÏ¢´«µÝ¸øËü£¬È»ºó·µ»Ø²¢µÈºò¾ä±ú£¨ÒѾÉÏËÝÔìÐÍ¡¡
ÖÁ»ù´¡ÀàÐÍ£©×÷Ϊ·µ»ØÖµ³öÏÖ¡£´ÓÕâʱ¿ªÊ¼£¬¾Í¿ÉÒÔ°´¶àÐÎÐԵķ½Ê½¶Ô´ý¶ÔÏóÁË¡£Òò´Ë£¬ÎÒÃǸù±¾Ã»±ØÒªÖª¡¡
µÀËù´´½¨¶ÔÏóµÄ׼ȷÀàÐÍÊÇʲô¡£ÊÂʵÉÏ£¬Factory¡¡·½·¨»á°Ñ×Ô¼ºÒþ²ØÆðÀ´£¬ÎÒÃÇÊÇ¿´²»¼ûËüµÄ¡£ÕâÑù×ö¿É¡¡
·ÀÖ¹²»É÷µÄÎóÓá£Èç¹ûÏëÔÚûÓжàÐÎÐÔµÄÇ°ÌáÏÂʹÓöÔÏ󣬱ØÐëÃ÷È·µØʹÓÃRTTI¡¡ºÍÖ¸¶¨ÔìÐÍ¡£¡¡¡¡
µ«ÈÔÈ»´æÔÚÒ»¸öСÎÊÌ⣬ÌرðÊÇÔÚ»ù´¡ÀàÖÐʹÓøü¸´Ôӵķ½·¨£¨²»ÊÇÔÚÕâÀïչʾµÄÄÇÖÖ£©£¬ÇÒÔÚÑÜÉúÀàÀï¹ý¡¡
ÔØ£¨¸²¸Ç£©ÁËËüµÄÇ°ÌáÏ¡£Èç¹ûÔÚÑÜÉúÀàÀïÇëÇóµÄÐÅÏ¢ÒªÇó¸ü¶à»òÕß²»Í¬µÄ²ÎÊý£¬ÄÇô¸ÃÔõô°ìÄØ£¿¡°´´½¨¡¡
¸ü¶àµÄ¶ÔÏó¡±½â¾öÁËÕâ¸öÎÊÌ⡣ΪʵÏÖFactory¡¡·½·¨£¬Trash¡¡ÀàʹÓÃÁËÒ»¸öеķ½·¨£¬ÃûΪ¡¡factory¡£ÎªÁ˽«¡¡
´´½¨Êý¾ÝÒþ²ØÆðÀ´£¬ÎÒÃÇÓÃÒ»¸öÃûΪ¡¡Info¡¡µÄÐÂÀà°üº¬¡¡factory¡¡·½·¨´´½¨Êʵ±µÄ¡¡Trash¡¡¶ÔÏóʱÐèÒªµÄÈ«²¿ÐÅ¡¡
Ï¢¡£ÏÂÃæÊÇ¡¡Info¡¡Ò»ÖÖ¼òµ¥µÄʵÏÖ·½Ê½£º¡¡¡¡
¡¡¡¡
class¡¡Info¡¡£û¡¡¡¡
¡¡¡¡int¡¡type£»¡¡¡¡
¡¡¡¡//¡¡Must¡¡change¡¡this¡¡to¡¡add¡¡another¡¡type£º¡¡¡¡
¡¡¡¡static¡¡final¡¡int¡¡MAX_NUM¡¡=¡¡4£»¡¡¡¡
¡¡¡¡double¡¡data£»¡¡¡¡
¡¡¡¡Info£¨int¡¡typeNum£»¡¡double¡¡dat£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡type¡¡=¡¡typeNum¡¡£¥¡¡MAX_NUM£»¡¡¡¡
¡¡¡¡¡¡¡¡data¡¡=¡¡dat£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡¡¡
¡¡¡¡
Info¡¡¶ÔÏóΨһµÄÈÎÎñ¾ÍÊÇÈÝÄÉÓÃÓÚfactory£¨£©·½·¨µÄÐÅÏ¢¡£ÏÖÔÚ£¬¼ÙÈç³öÏÖÁËÒ»ÖÖÌØÊâÇé¿ö£¬factory£¨£©ÐèÒª¡¡
¸ü¶à»òÕß²»Í¬µÄÐÅÏ¢À´Ð½¨Ò»ÖÖÀàÐ͵ÄTrash¡¡¶ÔÏó£¬ÄÇôÔÙÒ²²»ÐèÒª¸Ä¶¯factory£¨£©ÁË¡£Í¨¹ýÌí¼ÓеÄÊý¾Ý¡¡
ºÍ¹¹½¨Æ÷£¬ÎÒÃÇ¿ÉÒÔÐ޸ġ¡Info¡¡À࣬»òÕß²ÉÓÃ×ÓÀà´¦Àí¸üµäÐ͵ÄÃæÏò¶ÔÏóÐÎʽ¡£¡¡¡¡
ÓÃÓÚÕâ¸ö¼òµ¥Ê¾ÀýµÄfactory£¨£©·½·¨ÈçÏ£º¡¡¡¡
¡¡¡¡
¡¡¡¡static¡¡Trash¡¡factory£¨Info¡¡i£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡switch£¨i¡£type£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡default£º¡¡//¡¡To¡¡quiet¡¡the¡¡piler¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡case¡¡0£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return¡¡new¡¡Aluminum£¨i¡£data£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡case¡¡1£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return¡¡new¡¡Paper£¨i¡£data£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡case¡¡2£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return¡¡new¡¡Glass£¨i¡£data£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡//¡¡Two¡¡lines¡¡here£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡case¡¡3£º¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return¡¡new¡¡Cardboard£¨i¡£data£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡
ÔÚÕâÀ¶ÔÏóµÄ׼ȷÀàÐͺÜÈÝÒ×¼´¿ÉÅжϳöÀ´¡£µ«ÎÒÃÇ¿ÉÒÔÉèÏëһЩ¸ü¸´ÔÓµÄÇé¿ö£¬factory£¨£©½«²ÉÓÃÒ»ÖÖ¸´¡¡
ÔÓµÄËã·¨¡£ÎÞÂÛÈçºÎ£¬ÏÖÔڵĹؼüÊÇËüÒÑÒþ²Øµ½Ä³¸öµØ·½£¬¶øÇÒÎÒÃÇÔÚÌí¼ÓÐÂÀàÐÍʱ֪µÀÈ¥ÄǸöµØ·½¡£¡¡¡¡
жÔÏóÔÚmain£¨£©ÖеĴ´½¨ÏÖÔÚ±äµÃ·Ç³£¼òµ¥ºÍÇåˬ£º¡¡¡¡
¡¡¡¡
¡¡¡¡¡¡¡¡for£¨int¡¡i¡¡=¡¡0£»¡¡i¡¡¡¶¡¡30£»¡¡i£«£«£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡bin¡£addElement£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Trash¡£factory£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡Info£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£¨int£©£¨Math¡£random£¨£©¡¡*¡¡Info¡£MAX_NUM£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Math¡£random£¨£©¡¡*¡¡100£©£©£©£»¡¡¡¡
¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡596¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡598¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
ÎÒÃÇÔÚÕâÀï´´½¨ÁËÒ»¸ö¡¡Info¡¡¶ÔÏó£¬ÓÃÓÚ½«Êý¾Ý´«Èë¡¡factory£¨£©¡¡£»ºóÕßÔÚÄÚ´æ¶ÑÖд´½¨Ä³ÖÖTrash¡¡¶ÔÏ󣬲¢·µ¡¡
»ØÌí¼Óµ½Vector¡¡bin¡¡Äڵľä±ú¡£µ±È»£¬Èç¹û¸Ä±äÁ˲ÎÊýµÄÊýÁ¿¼°ÀàÐÍ£¬ÈÔÈ»ÐèÒªÐÞ¸ÄÕâ¸öÓï¾ä¡£µ«¼ÙÈç¡¡
Info¡¡¶ÔÏóµÄ´´½¨ÊÇ×Ô¶¯½øÐеģ¬Ò²¿ÉÒÔ±ÜÃâÄǸöÂé·³¡£ÀýÈ磬¿É½«²ÎÊýµÄÒ»¸ö¡¡Vector¡¡´«µÝµ½¡¡Info¡¡¶ÔÏóµÄ¹¹¡¡
½¨Æ÷ÖУ¨»òÖ±½Ó´«ÈëÒ»¸öfactory£¨£©µ÷Óã©¡£ÕâÒªÇóÔÚÔËÐÐÆÚ¼ä¶Ô²ÎÊý£¨×Ô±äÁ¿£©½øÐзÖÎöÓë¼ì²é£¬µ«È·Êµ¡¡
ÌṩÁ˷dz£¸ßµÄÁé»î³Ì¶È¡£¡¡¡¡
´ó¼Ò´ÓÕâ¸ö´úÂë¿É¿´³ö¡¡Factory¡¡Òª¸ºÔð½â¾öµÄ¡°ÁìÍ·±ä»¯¡±ÎÊÌ⣺Èç¹ûÏòϵͳÌí¼ÓÁËÐÂÀàÐÍ£¨·¢ÉúÁ˱䡡
»¯£©£¬Î¨Ò»ÐèÒªÐ޸ĵĴúÂëÔÚ¡¡Factory¡¡ÄÚ²¿£¬ËùÒÔFactory¡¡½«ÄÇÖֱ仯µÄÓ°Ïì¸ôÀë³öÀ´ÁË¡£¡¡¡¡
16¡£4¡£2¡¡ÓÃÓÚÔÐÍ´´½¨µÄÒ»¸ö·¶Ê½¡¡¡¡
ÉÏÊöÉè¼Æ·½°¸µÄÒ»¸öÎÊÌâÊÇÈÔÈ»ÐèÒªÒ»¸öÖÐÐij¡Ëù£¬±ØÐëÔÚÄÇÀïÖªµÀËùÓÐÀàÐ͵ĶÔÏó£ºÔÚfactory£¨£©·½·¨ÄÚ¡¡
²¿¡£Èç¹û¾³£¶¼ÒªÏòϵͳÌí¼ÓÐÂÀàÐÍ£¬factory£¨£©·½·¨ÎªÃ¿ÖÖÐÂÀàÐͶ¼ÒªÐÞ¸ÄÒ»±é¡£Èôȷʵ¶ÔÕâ¸öÎÊÌâ¸Ðµ½¿à¡¡
ÄÕ£¬¿ÉÊÔÊÔÔÙÉîÈëÒ»²½£¬½«ÓëÀàÐÍÓйصÄËùÓÐÐÅÏ¢¡ª¡ª°üÀ¨ËüµÄ´´½¨¹ý³Ì¡ª¡ª¶¼ÒÆÈë´ú±íÄÇÖÖÀàÐ͵ÄÀàÄÚ¡¡
²¿¡£ÕâÑùÒ»À´£¬Ã¿´ÎÐÂÌíÒ»ÖÖÀàÐ͵Äʱºò£¬ÐèÒª×öµÄΨһÊÂÇé¾ÍÊÇ´ÓÒ»¸öÀà¼Ì³Ð¡£¡¡¡¡
Ϊ½«Éæ¼°ÀàÐÍ´´½¨µÄÐÅÏ¢ÒÆÈëÌض¨ÀàÐ͵ġ¡Trash¡¡À±ØÐëʹÓá°ÔÐÍ¡±£¨prototype£©·¶Ê½£¨À´×Ô¡¶Design¡¡¡¡
Patterns¡·ÄDZ¾Ê飩¡£ÕâÀï×î»ù±¾µÄÏë·¨ÊÇÎÒÃÇÓÐÒ»¸öÖ÷¿Ø¶ÔÏóÐòÁУ¬Îª×Ô¼º¸ÐÐËȤµÄÿÖÖÀàÐͶ¼ÖÆ×÷Ò»¡¡
¸ö¡£Õâ¸öÐòÁÐÖеĶÔÏóÖ»ÄÜÓÃÓÚжÔÏóµÄ´´½¨£¬²ÉÓõIJÙ×÷ÀàËÆÄÚ½¨µ½Java¡¡¸ùÀàObject¡¡ÄÚ²¿µÄclone£¨£©»ú¡¡
ÖÆ¡£ÔÚÕâÖÖÇé¿öÏ£¬ÎÒÃǽ«¿Ë¡·½·¨ÃüÃûΪtClone£¨£©¡£×¼±¸´´½¨Ò»¸öжÔÏóʱ£¬ÒªÊÂÏÈÊÕ¼¯ºÃijÖÖÐÎʽµÄÐÅ¡¡
Ï¢£¬ÓÃËü½¨Á¢ÎÒÃÇÏ£ÍûµÄ¶ÔÏóÀàÐÍ¡£È»ºóÔÚÖ÷¿ØÐòÁÐÖбéÀú£¬½«ÊÖÉϵÄÐÅÏ¢ÓëÖ÷¿ØÐòÁÐÖÐÔÐͶÔÏóÄÚÈκÎÊÊ¡¡
µ±µÄÐÅÏ¢×÷¶Ô±È¡£ÈôÕÒµ½Ò»¸ö·ûºÏ×Ô¼ºÐèÒªµÄ£¬¾Í¿Ë¡Ëü¡£¡¡¡¡
²ÉÓÃÕâÖÖ·½°¸£¬ÎÒÃDz»±ØÓÃÓ²±àÂëµÄ·½Ê½Ö²ÈëÈκδ´½¨ÐÅÏ¢¡£Ã¿¸ö¶ÔÏó¶¼ÖªµÀÈçºÎ½Òʾ³öÊʵ±µÄÐÅÏ¢£¬ÒÔ¼°¡¡
ÈçºÎ¶Ô×ÔÉí½øÐпË¡¡£ËùÒÔÒ»ÖÖÐÂÀàÐͼÓÈëϵͳµÄʱºò£¬factory£¨£©·½·¨²»ÐèÒªÈκθı䡣¡¡¡¡
Ϊ½â¾öÔÐ͵Ĵ´½¨ÎÊÌ⣬һ¸ö·½·¨ÊÇÌí¼Ó´óÁ¿·½·¨£¬ÓÃËüÃÇÖ§³ÖжÔÏóµÄ´´½¨¡£µ«ÔÚ¡¡Java¡¡1¡£1¡¡ÖУ¬Èç¹ûÓµÓС¡
Ö¸ÏòClass¡¡¶ÔÏóµÄÒ»¸ö¾ä±ú£¬ÄÇôËüÒѾÌṩÁ˶Դ´½¨Ð¶ÔÏóµÄÖ§³Ö¡£ÀûÓÃJava¡¡1¡£1¡¡µÄ¡°·´É䡱£¨ÒÑÔÚµÚ¡¡
11Õ½éÉÜ£©¼¼Êõ£¬¼´±ãÎÒÃÇÖ»ÓÐÖ¸Ïò¡¡Class¡¡¶ÔÏóµÄÒ»¸ö¾ä±ú£¬Òà¿ÉÕý³£µØµ÷ÓÃÒ»¸ö¹¹½¨Æ÷¡£Õâ¶ÔÔÐÍÎÊÌâµÄ¡¡
½â¾öÎÞÒÉÊǸöÍêÃÀµÄ·½°¸¡£¡¡¡¡
ÔÐÍÁÐ±í½«ÓÉÖ¸ÏòËùÓÐÏë´´½¨µÄClass¡¡¶ÔÏóµÄÒ»¸ö¾ä±úÁбí¼ä½ÓµØ±íʾ¡£³ý´ËÖ®Í⣬¼ÙÈçÔÐÍ´¦Àíʧ°Ü£¬Ôò¡¡
factory£¨£©·½·¨»áÈÏΪÓÉÓÚÒ»¸öÌض¨µÄClass¡¡¶ÔÏó²»ÔÚÁбíÖУ¬ËùÒԻ᳢ÊÔ×°ÔØËü¡£Í¨¹ýÒÔÕâÖÖ·½Ê½¶¯Ì¬×°ÔØ¡¡
ÔÐÍ£¬Trash¡¡Àà¸ù±¾²»ÐèÒªÖªµÀ×Ô¼ºÒª²Ù×ݵÄÊÇʲôÀàÐÍ¡£Òò´Ë£¬ÔÚÎÒÃÇÌí¼ÓÐÂÀàÐÍʱ²»ÐèÒª×÷³öÈκÎÐÎʽ¡¡
µÄÐ޸ġ£ÓÚÊÇ£¬ÎÒÃÇ¿ÉÔÚ±¾ÕÂÊ£ÓàµÄ²¿·Ö·½±ãµØÖظ´ÀûÓÃËü¡£¡¡¡¡
¡¡¡¡
//£º¡¡Trash¡£java¡¡¡¡
//¡¡Base¡¡class¡¡for¡¡Trash¡¡recycling¡¡examples¡¡¡¡
package¡¡c16¡£trash£»¡¡¡¡
import¡¡java¡£util¡£*£»¡¡¡¡
import¡¡java¡£lang¡£reflect¡£*£»¡¡¡¡
¡¡¡¡
public¡¡abstract¡¡class¡¡Trash¡¡£û¡¡¡¡
¡¡¡¡private¡¡double¡¡weight£»¡¡¡¡
¡¡¡¡Trash£¨double¡¡wt£©¡¡£û¡¡weight¡¡=¡¡wt£»¡¡£ý¡¡¡¡
¡¡¡¡Trash£¨£©¡¡£û£ý¡¡¡¡
¡¡¡¡public¡¡abstract¡¡double¡¡value£¨£©£»¡¡¡¡
¡¡¡¡public¡¡double¡¡weight£¨£©¡¡£û¡¡return¡¡weight£»¡¡£ý¡¡¡¡
¡¡¡¡//¡¡Sums¡¡the¡¡value¡¡of¡¡Trash¡¡in¡¡a¡¡bin£º¡¡¡¡
¡¡¡¡public¡¡static¡¡void¡¡sumValue£¨Vector¡¡bin£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡Enumeration¡¡e¡¡=¡¡bin¡£elements£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡double¡¡val¡¡=¡¡0¡£0f£»¡¡¡¡
¡¡¡¡¡¡¡¡while£¨e¡£hasMoreElements£¨£©£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡//¡¡One¡¡kind¡¡of¡¡RTTI£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡//¡¡A¡¡dynamically¡checked¡¡cast¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡Trash¡¡t¡¡=¡¡£¨Trash£©e¡£nextElement£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡val¡¡£«=¡¡t¡£weight£¨£©¡¡*¡¡t¡£value£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡597¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡599¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¨weight¡¡of¡¡¡¨¡¡£«¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//¡¡Using¡¡RTTI¡¡to¡¡get¡¡type¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//¡¡information¡¡about¡¡the¡¡class£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡t¡£getClass£¨£©¡£getName£¨£©¡¡£«¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¨¡¡=¡¡¡¨¡¡£«¡¡t¡£weight£¨£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Total¡¡value¡¡=¡¡¡¨¡¡£«¡¡val£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡//¡¡Remainder¡¡of¡¡class¡¡provides¡¡support¡¡for¡¡¡¡
¡¡¡¡//¡¡prototyping£º¡¡¡¡
¡¡¡¡public¡¡static¡¡class¡¡PrototypeNotFoundException¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡extends¡¡Exception¡¡£û£ý¡¡¡¡
¡¡¡¡public¡¡static¡¡class¡¡CannotCreateTrashException¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡extends¡¡Exception¡¡£û£ý¡¡¡¡
¡¡¡¡private¡¡static¡¡Vector¡¡trashTypes¡¡=¡¡¡¡¡¡
¡¡¡¡¡¡¡¡new¡¡Vector£¨£©£»¡¡¡¡
¡¡¡¡public¡¡static¡¡Trash¡¡factory£¨Info¡¡info£©¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡throws¡¡PrototypeNotFoundException£»¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡CannotCreateTrashException¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡for£¨int¡¡i¡¡=¡¡0£»¡¡i¡¡¡¶¡¡trashTypes¡£size£¨£©£»¡¡i£«£«£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡//¡¡Somehow¡¡determine¡¡the¡¡new¡¡type¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡//¡¡to¡¡create£»¡¡and¡¡create¡¡one£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡Class¡¡tc¡¡=¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£¨Class£©trashTypes¡£elementAt£¨i£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡if¡¡£¨tc¡£getName£¨£©¡£indexOf£¨info¡£id£©¡¡£¡=¡¡¡1£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡try¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//¡¡Get¡¡the¡¡dynamic¡¡constructor¡¡method¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//¡¡that¡¡takes¡¡a¡¡double¡¡argument£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Constructor¡¡ctor¡¡=¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡tc¡£getConstructor£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡Class£§£§¡¡£ûdouble¡£class£ý£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//¡¡Call¡¡the¡¡constructor¡¡to¡¡create¡¡a¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//¡¡new¡¡object£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return¡¡£¨Trash£©ctor¡£newInstance£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡Object£§£§£ûnew¡¡Double£¨info¡£data£©£ý£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡catch£¨Exception¡¡ex£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ex¡£printStackTrace£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡throw¡¡new¡¡CannotCreateTrashException£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡Class¡¡was¡¡not¡¡in¡¡the¡¡list¡£¡¡Try¡¡to¡¡load¡¡it£»¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡but¡¡it¡¡must¡¡be¡¡in¡¡your¡¡class¡¡path£¡¡¡¡¡
¡¡¡¡¡¡¡¡try¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡System¡£out¡£println£¨¡¨Loading¡¡¡¨¡¡£«¡¡info¡£id£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡trashTypes¡£addElement£¨¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Class¡£forName£¨info¡£id£©£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡catch£¨Exception¡¡e£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡e¡£printStackTrace£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡throw¡¡new¡¡PrototypeNotFoundException£¨£©£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡Loaded¡¡successfully¡£¡¡Recursive¡¡call¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡598¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡600¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡should¡¡work¡¡this¡¡time£º¡¡¡¡
¡¡¡¡¡¡¡¡return¡¡factory£¨info£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡public¡¡static¡¡class¡¡Info¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡public¡¡String¡¡id£»¡¡¡¡
¡¡¡¡¡¡¡¡public¡¡double¡¡data£»¡¡¡¡
¡¡¡¡¡¡¡¡public¡¡Info£¨String¡¡name£»¡¡double¡¡data£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡id¡¡=¡¡name£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡this¡£data¡¡=¡¡data£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý¡¡///£º~¡¡¡¡
¡¡¡¡
»ù±¾Trash¡¡ÀàºÍ¡¡sumValue£¨£©»¹ÊÇÏóÍù³£Ò»Ñù¡£Õâ¸öÀàʣϵIJ¿·ÖÖ§³ÖÔÐÍ·¶Ê½¡£´ó¼ÒÊ×ÏȻῴµ½Á½¸öÄÚ²¿Àà¡¡
¡¡£¨±»ÉèΪstatic¡¡ÊôÐÔ£¬Ê¹Æä³ÉΪֻΪ´úÂë×é֯ĿµÄ¶ø´æÔÚµÄÄÚ²¿Àࣩ£¬ËüÃÇÃèÊöÁË¿ÉÄܳöÏÖµÄÎ¥Àý¡£ÔÚËüºó¡¡
Ãæ¸úËæµÄÊÇÒ»¸öVector¡¡trashTypes£¬ÓÃÓÚÈÝÄÉ¡¡Class¡¡¾ä±ú¡£¡¡¡¡
ÔÚTrash¡£factory£¨£©ÖУ¬Info¡¡¶ÔÏó¡¡id¡¡£¨Info¡¡ÀàµÄÁíÒ»¸ö°æ±¾£¬ÓëÇ°ÃæÌÖÂ۵IJ»Í¬£©ÄÚ²¿µÄ¡¡String¡¡°üº¬ÁËÒª¡¡
´´½¨µÄÄÇÖÖ¡¡Trash¡¡µÄÀàÐÍÃû³Æ¡£Õâ¸ö¡¡String¡¡»áÓëÁбíÖеÄClass¡¡Ãû±È½Ï¡£Èô´æÔÚÏà·ûµÄ£¬ÄDZãÊÇÒª´´½¨µÄ¶Ô¡¡
Ïó¡£µ±È»£¬»¹Óкܶ෽·¨¿ÉÒÔ¾ö¶¨ÎÒÃÇÏë´´½¨µÄ¶ÔÏó¡£Ö®ËùÒÔÒª²ÉÓÃÕâÖÖ·½·¨£¬ÊÇÒòΪ´ÓÒ»¸öÎļþ¶ÁÈëµÄÐÅ¡¡
Ï¢¿ÉÒÔת»»³É¶ÔÏ󡣡¡¡¡
·¢ÏÖ×Ô¼ºÒª´´½¨µÄTrash¡¡£¨À¬»ø£©ÖÖÀàºó£¬½ÓÏÂÀ´¾ÍÂÖµ½¡°·´É䡱·½·¨´óÏÔÉíÊÖÁË¡£getConstructor£¨£©·½·¨¡¡
ÐèҪȡµÃ×Ô¼ºµÄ²ÎÊý¡ª¡ªÓÉClass¡¡¾ä±ú¹¹³ÉµÄÒ»¸öÊý×é¡£Õâ¸öÊý×é´ú±í×Ų»Í¬µÄ²ÎÊý£¬²¢°´ËüÃÇÕýÈ·µÄ˳Ðò¡¡
ÅÅÁУ¬ÒÔ±ãÎÒÃDzéÕҵĹ¹½¨Æ÷ʹÓá£ÔÚÕâ¶ù£¬¸ÃÊý×éÊÇÓá¡Java¡¡1¡£1¡¡µÄÊý×é´´½¨Óï·¨¶¯Ì¬´´½¨µÄ£º¡¡¡¡
new¡¡Class£§£§¡¡£ûdouble¡£class£ý¡¡¡¡
Õâ¸ö´úÂë¼Ù¶¨ËùÓС¡Trash¡¡ÀàÐͶ¼ÓÐÒ»¸öÐèÒª¡¡double¡¡ÊýÖµµÄ¹¹½¨Æ÷£¨×¢Òâ¡¡double¡£class¡¡Óë¡¡Double¡£class¡¡ÊDz»¡¡
ͬµÄ£©¡£Èô¿¼ÂÇÒ»ÖÖ¸üÁé»îµÄ·½°¸£¬Òà¿Éµ÷Óá¡getConstructors£¨£©£¬ÁîÆä·µ»Ø¿ÉÓù¹½¨Æ÷µÄÒ»¸öÊý×é¡£¡¡¡¡
´ÓgetConstructors£¨£©·µ»ØµÄÊÇÖ¸ÏòÒ»¸ö¡¡Constructor¡¡¶ÔÏóµÄ¾ä±ú£¨¸Ã¶ÔÏóÊÇ¡¡java¡£lang¡£reflect¡¡µÄÒ»²¿¡¡
·Ö£©¡£ÎÒÃÇÓ÷½·¨¡¡newInstance£¨£©¡¡¶¯Ì¬µØµ÷Óù¹½¨Æ÷¡£¸Ã·½·¨ÐèÒª»ñÈ¡°üº¬ÁËʵ¼Ê²ÎÊýµÄÒ»¸öObject¡¡Êý×é¡£¡¡
Õâ¸öÊý×éͬÑùÊÇ°´¡¡Java¡¡1¡£1¡¡µÄÓï·¨´´½¨µÄ£º¡¡¡¡
new¡¡Object£§£§¡¡£ûnew¡¡Double£¨info¡£data£©£ý¡¡¡¡
ÔÚÕâÖÖÇé¿öÏ£¬double¡¡±ØÐëÖÃÈëÒ»¸ö·â×°£¨ÈÝÆ÷£©ÀàµÄÄÚ²¿£¬Ê¹ÆäÕæÕý³ÉΪÕâ¸ö¶ÔÏóÊý×éµÄÒ»²¿·Ö¡£Í¨¹ýµ÷¡¡
ÓÃnewInstance£¨£©¡¡£¬»áÌáÈ¡³ö¡¡double£¬µ«´ó¼Ò¿ÉÄÜ»á¾õµÃÉÔ΢ÓÐЩÃԻ󡪡ª²ÎÊý¼È¿ÉÄÜÊÇ¡¡double£¬Ò²¿ÉÄÜÊÇ¡¡
Double£¬µ«ÔÚµ÷ÓõÄʱºò±ØÐëÓÃDouble¡¡´«µÝ¡£ÐÒÔ˵ÄÊÇ£¬Õâ¸öÎÊÌâÖ»´æÔÚÓÚ»ù±¾Êý¾ÝÀàÐ