Õ§Ò»¿´£¬ÕâÏñÊÇÒ»³¡»ìÕ½£ºÐÅÏ¢ºéÁ÷¡¢Ö°ÔðÄ£ºý¡¢À©Õ¹ÄÑÌâ¡¢²âÊÔ²»Òס£°ÑÕⳡ¡°»ìÕ½¡±Ã÷ȷΪһ³¡ÈËÂí´óÕ½£¬ÄÜÈÃÉè¼ÆÔÔò±äµÃ¸üÖ±¹Û¡£ÈËÏóÕ÷×ÅÃæÏò¹¤¾ßµÄ½¹µãÀíÄ¡ª·â×°¡¢¼ÌÐø¡¢¶à̬£»ÂíÔò´ú±íϵͳÖеĽṹÐÔÖ§³Ö£¬ÈçÊý¾ÝÄ£×Ó¡¢¹¤³Ì¹¤¾ß¡¢¿ò¼ÜÓëÔ¼¶¨¡£Í¨¹ýÕâÑùµÄÒþÓ÷£¬ÎÒÃDz»ÔÙÖ»¶¢×Å¡°´úÂëÔõôд¡±£¬¶øÊǹØ×¢¡°Õ½¶·Ôõô´ò¡±¡£
ÔÚJava´úÂë´óÈ«µÄ½â¶ÁÀËùÓÐÕ½ڶ¼ÔÚ½ÌÄãÓÃÇåÎúµÄÕ½ÊõÀ´¿ØÖÆÊ±ÊÆ£ºÓýӿÚÀ´½µµÍñîºÏ£¬ÓÃÖ°ÔðÊèÉ¢À´×èÖ¹ÔÓÂÒ£¬ÓÃģʽÀ´Ó¦¶Ôת±ä£¬ÓòâÊÔÀ´Ëø¶¨Ê¤ÀûÌõ¼þ¡£Í¨¹ý¶ÔÏêϸ´úÂëµÄ²ð½â£¬ÎÒÃÇÄÜ¿´µ½Ò»¸ö¿´ËÆÖØ´óµÄϵͳ£¬ÔõÑùÔÚ΢¹ÛÉÏ×ñÕÕͳһµÄÕ½Êõ£¬×îÖÕÔÚºê¹ÛÉϼá³Ö¿Éά»¤¡¢¿ÉÀ©Õ¹ºÍ¿ÉÑݽø¡£
СÎÊÌâ2£º´Ó×ÜÌå½á¹¹µ½Î¢¹ÛʵÏֵĽâ¶ÁÒª½²ÇåÎúÒ»¶Î´úÂëµÄ¼ÛÖµ£¬Ïȴӽṹ̸Æð£¬ÔÙ̸ʵÏÖ¡£Java´úÂë´óȫǿµ÷µÄ²»ÊǼòµ¥¼¼·¨£¬¶øÊÇÒ»×éÐͬÊÂÇéµÄÔÔòÓëģʽ¡£µÚÒ»²½ÊÇʶ±ðÖ°Ôð£ºËÀ´¾öÒéÐж¯¡¢ËÀ´Ö´ÐÐÐж¯¡¢ËÀ´×éÖ¯Êý¾Ý¡£½Ó׎¨ÉèÇåÎúµÄ½Ó¿ÚºÍ½çÏߣ¬ÈÃʵÏÖ¿ÉÒÔËæÊ±Ìæ»»¶ø²»Ó°ÏìŲÓ÷½¡£
Æä´ÎÒýÈëÕ½ÂÔÓ빤³§µÈģʽ£¬ÎªÎ´À´µÄÀ©Õ¹ÁôÏÂÈë¿Ú¡£×îºóͨ¹ý²âÊÔÀ´ÑéÖ¤Éè¼ÆµÄ׼ȷÐÔÓë³°ôÐÔ¡£°ÑÕâЩ˼Ð÷Â䵨µ½´úÂëÀÎÒÃÇÐèÒª±ÈÕÕÁ½¸ö²ãÃæ£ºÒ»ÊÇÀàµÄÖ°Ôð½çÏߣ¬¶þÊǹ¤¾ßÖ®¼äµÄÐ×÷¹ØÏµ¡£Ê¾ÀýÖеÄBattleϵͳ¾ÍչʾÁËÕâ¸öÀú³Ì£º½Çɫͨ¹ýFighter½Ó¿Ú̻¶ÅäºÏÄÜÁ¦£¬ÏêϸʵÏÖ£¨Human¡¢CentaurµÈ£©ÈÏÕæ¸÷×ÔµÄÕ½¶·Ï¸½Ú£¬BattleÈÏÕæµ÷ÀíÓë×éºÏ¡£
ÕâÑùµÄÉè¼Æ²»µ«ÄÜÓ¦¶ÔÐÂÔö¾üÖÖ£¬»¹±ãÓÚÌæ»»Õ½ÂÔ¡¢À©Õ¹Ð¹¦Ð§£¬¶ø²»Ó°Ïì¼ÈÓг¡¾°¡£
½Ó¿ÚÓë¶à̬£ºFighter½Ó¿Ú½ç˵ÁËÅäºÏÐж¯£¬Human¡¢CentaurµÈʵÏÖ¸÷×ÔÆø¸Å£¬Ê¹ÔËÐÐʱ¿ÉÒÔͨ¹ýͳһÈë¿ÚŲÓòî±ðʵÏÖ¡£·â×°ÓëÖ°ÔðÊèÉ¢£ºÃ¿¸öÀàÖ»ÌåÌù×ÔÉíµÄÊý¾ÝºÍÐÐΪ£¬×èÖ¹ÔÚÒ»¸öÀàÀïȺ¼¯¹ý¶àÖ°Ôð£¬ÌáÉý¿Éά»¤ÐÔ¡£Õ½ÂÔÓë×éºÏ£ºÕ½¶··½·¨¿ÉÔÚÔËÐÐʱÇл»£¬±ãÓÚÀ©Õ¹£¬²»ÐèÒªÐ޸Ľ¹µãµ÷ÀíÂß¼¡£
¿É²âÊÔÐÔ£ºÍ¨¹ýÄ£ÄâFighterµÄʵÏÖ£¬BattleµÄÐÐΪ¿ÉÒÔ×ÔÁ¦²âÊÔ£¬½µµÍ²âÊÔÄѶȡ£ÊµÕ½Ê¾Àý£¨¼ò»¯°æ´úÂëÆ¬¶Ï£¬±ãÓÚÃ÷È·£©£º//¼ò»¯Ê¾Àý£ºÕ½¶·½ÇÉ«publicinterfaceFighter{voidattack();intgetPower();}publicclassHumanimplementsFighter{privateintpower;publicHuman(intp){this.power=p;}publicvoidattack(){System.out.println("ÈËÀà½üÕ½£¬ÊµÁ¦="+power);}publicintgetPower(){returnpower;}}publicclassCentaurimplementsFighter{privateintpower;publicCentaur(intp){this.power=p;}publicvoidattack(){System.out.println("°ëÈËÂí³å·æ£¬ÆïÁ¦="+power);}publicintgetPower(){returnpower;}}publicclassBattle{publicstaticvoidmain(String[]args){Fighterh=newHuman(12);Fighterc=newCentaur(16);h.attack();c.attack();}}½â¶ÁÒªµãÔÚÓÚ£ºÕâ¶Î´úÂëչʾÁ˽ӿÚÇý¶¯¡¢½âñîºÏ¡¢Ò×À©Õ¹µÄ½¹µã˼Ð÷¡£
Ö»ÒªÐÂÔöÒ»ÖÖ¾üÖÖ£¬»òÕßÒýÈëеÄÕ½ÂÔ£¬½¹µãµ÷ÀíÂß¼²»ÐèÒª¸Ä¶¯¡£Í¨¹ý¼òÆÓµÄʾÀý£¬ÎÒÃǰÑÁýͳÔÔòÂäÔÚÏêϸʵÏÖÉÏ£¬ÐγɿÉÖØ¸´Ê¹Óõġ°Õ½ÊõÄ£°å¡±¡£
ÔÚPart1µÄβÉù£¬ÎÒÃÇÒѾ°Ñ¡°Õ½³¡¡±´Ó¿´·¨ÌáÉýµ½ÁË¿ÉÂ䵨µÄ½á¹¹¼¶Éè¼Æ¡£Part2½«°ÑÕâЩÔÔòת»¯ÎªÕæÊµµÄÂ䵨³¡¾°£¬¸ø³ö¸üÌù½üÏîĿʵ¼ùµÄʵսÑÝÁ·Óë½ø½×¼¼ÇÉ¡£Äã»á¿´µ½ÔõÑù°Ñ¡°ÈËÂí´óÕ½¡±µÄÕÜѧ£¬ÕæÕýÂä½øÄãÒ»Ñùƽ³£µÄ´úÂëÖУ¬×ÊÖúÄãÔÚÃæÁÙÖØ´óϵͳʱ£¬ÈÔÈ»¼á³ÖÇåÎúµÄÅжÏÓë¸ßЧµÄʵÏÖ¡£
СÎÊÌâ1£ºÊµÕ½ÑÝÁ·Ò»£º´ÓÁýͳµ½ÁìÓòµÄÂ䵨Éè¼ÆÔÚÏÖʵÏîÄ¿ÖУ¬ÏµÍ³ÍùÍùÐèÒª´¦Öóͷ£¶à±äµÄÓªÒµ¹æÔòÓë¸ßñîºÏµÄÄ£¿éÐ×÷¡£ÒÔÕ½¶·³¡¾°ÎªÀý£¬ÎÒÃÇ¿ÉÒÔ°ÑÁìÓòÄ£×Ó²ð·ÖΪÁìÓò¹¤¾ß¡¢Õ½ÂÔ¹¤¾ßºÍÊÂÎñÇý¶¯Èý²ã½á¹¹¡£ÁìÓò¹¤¾ßÈÏÕæÊý¾ÝÓë»ù±¾ÐÐΪ£¬Õ½ÂÔ¹¤¾ß³ÐÔØÐÐΪµÄ¿É±äÐÔ£¬ÊÂÎñÇý¶¯ÔòʵÏÖ½âñîÓëÏìӦʽÀ©Õ¹¡£
ͨ¹ýÕâÖֲַ㣬ÎÒÃÇʵÏÖÁË¡°ÈËÂí´óÕ½¡±ÖеÄÎÞаÅűøÅÅÕ󣺲î±ð¾üÖÖͨ¹ýÕ½ÂÔÇл»¹¥»÷·½·¨£¬ÏµÍ³Í¨¹ýÊÂÎñÇý¶¯¶ÔÍⲿת±ä×ö³öÏìÓ¦£¬¶ø½¹µãÕ½Êõ¼á³ÖÎȹ̡£
ÁìÓòÄ£×ÓÇåÎú»¯£º°Ñ½ÇÉ«£¨Character¡¢Fighter¡¢MageµÈ£©ÓëÕ½¶·Ìõ¼þ£¨Position¡¢Distance¡¢HealthµÈ£©ÊèÉ¢£¬×èÖ¹°ÑËùÓÐÂß¼Èû½øÍ³Ò»¸öÀà¡£Õ½ÂÔÇý¶¯ÐÐΪ£ºÉè¼ÆStrategy½Ó¿Ú£¬Ìṩ¶àÖÖ¹¥»÷»ò·ÀÊØÕ½ÂÔ£¬ÔÊÐíÔÚÔËÐÐÊ±Ìæ»»£¬Ìá¸ßÀ©Õ¹ÐÔ¡£
ÊÂÎñ»¯Ð×÷£ºÍ¨¹ýdzÒ×ÊÂÎñ×ÜÏߣ¬½Çɫ֮¼ä¡¢ÏµÍ³ÓëÍⲿ×é¼þÖ®¼äµÄñîºÏ¶È½µµÍ£¬ÐÂÔöÊÂÎñ¿É²»ÆÆËðÏÖÓÐÂß¼¡£µä·¶´úÂëÆ¬¶Ï£¨Õ½ÂÔģʽµÄ¼ò»¯ÊµÏÖ£©£ºpublicinterfaceStrategy{voidexecute(Characteractor,BattleContextctx);}publicclassMeleeStrategyimplementsStrategy{publicvoidexecute(Characteractor,BattleContextctx){//Ïòǰ½üÕ½¹¥»÷Âß¼System.out.println(actor.getName()+"ÒÔ½üÕ½¹¥»÷£¬Î£ÏÕ="+actor.getPower());}}publicclassRangedStrategyimplementsStrategy{publicvoidexecute(Characteractor,BattleContextctx){//Ô¶³Ì¹¥»÷Âß¼System.out.println(actor.getName()+"¾ÙÐÐÔ¶³Ì¹¥»÷£¬¾àÀë="+ctx.getDistance());}}publicclassCharacter{privateStringname;privateintpower;privateStrategystrategy;publicCharacter(Stringname,intpower){this.name=name;this.power=power;}publicvoidsetStrategy(Strategys){this.strategy=s;}publicvoidact(BattleContextctx){if(strategy!=null)strategy.execute(this,ctx);}publicStringgetName(){returnname;}publicintgetPower(){returnpower;}}publicclassBattleContext{privateintdistance;publicBattleContext(intdistance){this.distance=distance;}publicintgetDistance(){returndistance;}}˵Ã÷£ºÍ¨¹ýÕ½ÂÔģʽ£¬½ÇÉ«µÄÐж¯±»½âñÐµĹ¥»÷·½·¨¿ÉÒÔÔÚ²»¸Ä¶¯CharacterµÄÇéÐÎÏÂÔöÌí¡£
ÓÚÊÇ£¬µ±Õ½³¡Çé¾³´Ó½üսתΪԶ³Ì£¬ÏµÍ³Ö»ÐèÒªÇл»Õ½ÂÔ¼´¿É£¬À©Õ¹ÐÔ×ÔÈ»ÌáÉý¡£
СÎÊÌâ2£ºÊµÕ½ÑÝÁ·¶þ£ºÊÂÎñÇý¶¯ÓëÀ©Õ¹ÐÔÔÚÖØ´óϵͳÖУ¬ÊÂÎñÇý¶¯ÊÇÒ»ÖÖÇ¿ÓÐÁ¦µÄ½âñîÊֶΡ£½«¡°Õ½¶·é_ʼ¡±¡¢¡°¾üÖÖéæÃü¡±¡¢¡°½×¶ÎÇл»¡±µÈÊÂÎñÁýͳΪÊÂÎñÖÐÐĵÄÐû²¼Óë¶©ÔÄ£¬¿ÉÒÔÈÃÄ£¿éÖ®¼äµÄñîºÏ½µµ½×îµÍ¡£ÏêϸʵÏÖʱ£¬¿ÉÒÔÏÈÉè¼ÆÒ»¸ödzÒ×µÄÊÂÎñ×ÜÏߣ¬ÔÊÐíí§Ò⹤¾ß¶©ÔĸÐÐËȤµÄÊÂÎñ£¬²¢ÔÚÊÂÎñ±¬·¢Ê±Ðû²¼Í¨Öª¡£
ÕâÑù£¬µ±ÄãÒýÈëеÄÕ½³¡¹æÔò¡¢ÐµľüÖÖ¡¢ÉõÖÁ¿çÄ£¿éµÄÐ×÷ÐèÇóʱ£¬Ö»ÐèÒªÌí¼ÓеÄÊÂÎñºÍÊÂÎñ´¦Öóͷ£Æ÷£¬¶ø²»ÐèÒª¸Ä¶¯ÏÖÓеÄŲÓùØÏµ¡£ÊµÕ½ÖУ¬²¿·ÖÊÂÎñ¿ÉÄÜÐèÒª³¤ÆÚ»¯»òÒì²½´¦Öóͷ££¬ÕâʱÔÙÒýÈëÐÐÁС¢Ï̳߳صÈÖÐÐļþ¼´¿É¡£
Çé¾°Ò»£ºµ±CentaurµÄÉúÃüÖµ½µÎª0ʱ´¥·¢¡°¾üÖÖéæÃü¡±ÊÂÎñ£¬ÏµÍ³¿ÉÒԾݴ˸üÐÂͳ¼Æ¡¢´¥·¢¸´ÉúÆøÖÆ»òµ÷½âÕ½Êõ¡£Çé¾°¶þ£ºÕ½¶·½øÈëij¸ö½×¶Îʱ£¬´¥·¢¡°½×¶ÎÇл»¡±ÊÂÎñ£¬Í¨ÖªËùÓÐÏà¹Ø¹¤¾ßµ÷½âÕ½ÂÔ¡£¼òÒª´úÂëÑÝʾ£¨ÊÂÎñ×ÜÏßÓë´¦Öóͷ£Æ÷µÄ¼«¼òʵÏÖ£©£ºpublicclassEventBus{privateMap
СÎÊÌâ3£º´Ó´úÂë´óÈ«µ½ÕæÊµÏîÄ¿µÄǨáã·¾¶ÈôÊÇÄãÏ£Íû°ÑÕâЩÉè¼ÆÍ·ÄÔ´ø½øÒ»Ñùƽ³£ÊÂÇ飬¿ÉÒÔ˼Á¿ÒÔϽ¥½øÂ·¾¶£º
ʶ±ðÖ°Ôð½çÏߣº¶ÔÏÖÓÐÄ£¿é¾ÙÐÐÖ°ÔðÊáÀí£¬Ã÷ȷÿ¸öÀàµÄ½¹µãÖ°Ôð¡£°ÑÐÐΪÍ⻯ΪսÂÔ£ºÄÄЩÐÐΪ¿ÉÄÜת±ä¾ÍÍ⻯Ϊ½Ó¿Ú»òÕ½ÂÔ¹¤¾ß£¬Àû±ãÌæ»»¡£ÒýÈëÇáÁ¿¼¶ÊÂÎñ»úÖÆ£ºÓÃÊÂÎñ×ÜÏß»òÐÂÎÅÐÐÁÐʵÏÖÄ£¿é½âñÏÈ´ÓÍâµØÊÂÎñ×îÏÈ¡£±àд¿É²âÊÔµÄ×éºÏ£ºÍ¨¹ý×éºÏ¹¤¾ß¡¢Õ½ÂÔ¹¤¾ßºÍÄ£Ä⹤¾ß£¬ÌáÉý²âÊÔÁýÕÖÂÊ¡£
½¥½øÊ½¸´ÓÃÉè¼Æ£ºÔÚ²»ÆÆËðÒÑÓй¦Ð§µÄÌõ¼þÏ£¬Öð²½Áýͳ¹«¹²ÄÜÁ¦£¬Ðγɿɸ´ÓõĿò¼Ü×é¼þ¡£Í¨¹ýÒÔÉϰ취£¬ÄãÄÜÔÚ²»ÎþÉü½»¸¶ËÙÂʵÄÇéÐÎÏ£¬Öð²½°Ñ¡°ÈËÂí´óÕ½¡±µÄÕ½ÊõÄð³É¹«Ë¾¼¶±ðµÄ¹¤³Ìʵ¼ù¡£
×îºóÓëÕ¹ÍûÕâ·ÝÁ½-partµÄ½â¶Á£¬ÏñÊÇÒ»³¡Ò»Á¬µÄÕ½¶·ÑÝÁ·£ºPart1¾Û½¹ÓÚÉè¼ÆÔÔòÓë½á¹¹Êӽǣ¬×ÊÖúÄãÔÚÄÔº£Öн¨ÉèÇåÎúµÄÕ½¶·Í¼£»Part2Ôò°ÑÔÔòÂ䵨µ½ÊµÕ½³¡¾°£¬¸ø³öÏêϸµÄÂ䵨սÂÔÓë´úÂëÑÝÁ·¡£Äã»áÔÚÏÖʵÏîÄ¿ÖÐÖð½¥Ìå»áµ½£¬ÓÅÒìµÄ´úÂë²»µ«Êǽâ¾öÎÊÌâµÄ¹¤¾ß£¬¸üÊÇÒ»Ì׿ÉÖØ¸´Ê¹ÓõÄÕ½Êõ¿â¡£
ÈôÄãÕýÔÚ±àд»òÓÅ»¯JavaÓ¦Ó㬶Á¶®Õâ·Ý½â¶Á£¬½«ÈÃÄãÔÚÃæÁÙת±äʱ£¬ÓµÓиüºÃµÄ×¼±¸ÓëÏìÓ¦ÄÜÁ¦¡£Ô¸ÄãµÄ´úÂëÏñѵÁ·ÓÐËØµÄ²½¶Ó£¬ËæÊ±×¼±¸Ó½ÓеÄÌôÕ½ÓëʤÀû¡£