°Ë±¦Êé¿â > ÎÄѧÆäËûµç×ÓÊé > Java±à³Ì˼ÏëµÚ4°æ[ÖÐÎÄ°æ](PDF¸ñʽ) >

µÚ154²¿·Ö

Java±à³Ì˼ÏëµÚ4°æ[ÖÐÎÄ°æ](PDF¸ñʽ)-µÚ154²¿·Ö

С˵£º Java±à³Ì˼ÏëµÚ4°æ[ÖÐÎÄ°æ](PDF¸ñʽ) ×ÖÊý£º ÿҳ4000×Ö

°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·­Ò³£¬°´¼üÅÌÉ쵀 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¡¡´«µÝ¡£ÐÒÔ˵ÄÊÇ£¬Õâ¸öÎÊÌâÖ»´æÔÚÓÚ»ù±¾Êý¾ÝÀàÐ

·µ»ØĿ¼ ÉÏÒ»Ò³ ÏÂÒ»Ò³ »Øµ½¶¥²¿ ÔÞ£¨0£© ²È£¨1£©

Äã¿ÉÄÜϲ»¶µÄ