ÉîÈëdz³ö»ùÓÚJavaµÄ½âÊÍÆ÷Éè¼ÆÄ£Ê½ |
|
|
×÷ÕߣºÎ´Öª À´Ô´£ºÔ¹âÈí¼þÕ¾ ¼ÓÈëʱ¼ä£º2005-2-28¡¡Ô¹âÈí¼þÕ¾ |
¡¡¡¡Ò»¡¢Òý×Ó
¡¡¡¡ÆäʵûÓÐʲôºÃµÄÀý×ÓÒýÈë½âÊÍÆ÷ģʽ£¬ÒòΪËüÃèÊöÁËÈçºÎ¹¹³ÉÒ»¸ö¼òµ¥µÄÓïÑÔ½âÊÍÆ÷£¬Ö÷ÒªÓ¦ÓÃÔÚʹÓÃÃæÏò¶ÔÏóÓïÑÔ¿ª·¢±àÒëÆ÷ÖУ»ÔÚʵ¼ÊÓ¦ÓÃÖУ¬ÎÒÃÇ¿ÉÄܺÜÉÙÅöµ½È¥¹¹ÔìÒ»¸öÓïÑÔµÄÎÄ·¨µÄÇé¿ö¡£
¡¡¡¡ËäÈ»Ä㼸ºõÓò»µ½Õâ¸öģʽ£¬µ«ÊÇ¿´Ò»¿´»¹ÊÇÄÜÊܵ½Ò»¶¨µÄÆô·¢µÄ¡£
¡¡¡¡¶þ¡¢¶¨ÒåÓë½á¹¹
¡¡¡¡½âÊÍÆ÷ģʽµÄ¶¨ÒåÈçÏ£º¶¨ÒåÓïÑÔµÄÎÄ·¨£¬²¢ÇÒ½¨Á¢Ò»¸ö½âÊÍÆ÷À´½âÊ͸ÃÓïÑÔÖеľä×Ó¡£ËüÊôÓÚÀàµÄÐÐΪģʽ¡£ÕâÀïµÄÓïÑÔÒâ˼ÊÇʹÓù涨¸ñʽºÍÓï·¨µÄ´úÂë¡£
¡¡¡¡ÔÚGOFµÄÊéÖÐÖ¸³ö£ºÈç¹ûÒ»ÖÖÌØ¶¨ÀàÐ͵ÄÎÊÌâ·¢ÉúµÄƵÂÊ×ã¹»¸ß£¬ÄÇô¿ÉÄܾÍÖµµÃ½«¸ÃÎÊÌâµÄ¸÷¸öʵÀý±íÊöΪһ¸ö¼òµ¥ÓïÑÔÖеľä×Ó¡£ÕâÑù¾Í¿ÉÒÔ¹¹½¨Ò»¸ö½âÊÍÆ÷£¬¸Ã½âÊÍÆ÷ͨ¹ý½âÊÍÕâЩ¾ä×ÓÀ´½â¾ö¸ÃÎÊÌâ¡£¶øÇÒµ±ÎÄ·¨¼òµ¥¡¢Ð§Âʲ»ÊǹؼüÎÊÌâµÄʱºòЧ¹û×îºÃ¡£
¡¡¡¡ÕâÒ²¾ÍÊǽâÊÍÆ÷ģʽӦÓõĻ·¾³ÁË¡£
¡¡¡¡ÈÃÎÒÃÇÀ´¿´¿´ÉñÃØµÄ½âÊÍÆ÷ģʽÊÇÓÉʲôÀ´×é³ÉµÄ°É¡£
¡¡¡¡1) ³éÏó±í´ïʽ½ÇÉ«£ºÉùÃ÷Ò»¸ö³éÏóµÄ½âÊͲÙ×÷£¬Õâ¸ö½Ó¿ÚΪËùÓоßÌå±í´ïʽ½ÇÉ«£¨³éÏóÓï·¨Ê÷ÖеĽڵ㣩¶¼ÒªÊµÏֵġ£
¡¡¡¡Ê²Ã´½Ð×ö³éÏóÓï·¨Ê÷ÄØ£¿¡¶javaÓëģʽ¡·ÖиøµÄ½âÊÍΪ£º³éÏóÓï·¨Ê÷µÄÿһ¸ö½Úµã¶¼´ú±íÒ»¸öÓï¾ä£¬¶øÔÚÿ¸ö½ÚµãÉ϶¼¿ÉÒÔÖ´ÐнâÊÍ·½·¨¡£Õâ¸ö½âÊÍ·½·¨µÄÖ´Ðоʹú±íÕâ¸öÓï¾ä±»½âÊÍ¡£ÓÉÓÚÿһ¸öÓï¾ä¶¼´ú±íÕâ¸öÓï¾ä±»½âÊÍ¡£ÓÉÓÚÿһ¸öÓï¾ä¶¼´ú±íÒ»¸ö³£¼ûµÄÎÊÌâµÄʵÀý£¬Òò´Ëÿһ¸ö½ÚµãÉϵĽâÊͲÙ×÷¶¼´ú±í¶ÔÒ»¸öÎÊÌâʵÀýµÄ½â´ð¡£
¡¡¡¡2) ÖÕ½á·û±í´ïʽ½ÇÉ«£º¾ßÌå±í´ïʽ¡£
¡¡¡¡a) ʵÏÖÓëÎÄ·¨ÖеÄÖÕ½á·ûÏà¹ØÁªµÄ½âÊͲÙ×÷
¡¡¡¡b) ¶øÇÒ¾ä×ÓÖеÄÿ¸öÖÕ½á·ûÐèÒª¸ÃÀàµÄÒ»¸öʵÀýÓëÖ®¶ÔÓ¦
¡¡¡¡3) ·ÇÖÕ½á·û±í´ïʽ½ÇÉ«£º¾ßÌå±í´ïʽ¡£
¡¡¡¡a) ÎÄ·¨ÖеÄÿÌõ¹æÔòR::=R1R2…Rn¶¼ÐèÒªÒ»¸ö·ÇÖÕ½á·û±í´øÊ½½ÇÉ«
¡¡¡¡b) ¶ÔÓÚ´ÓR1µ½RnµÄÿ¸ö·ûºÅ¶¼Î¬»¤Ò»¸ö³éÏó±í´ïʽ½ÇÉ«µÄʵÀý±äÁ¿
¡¡¡¡c) ʵÏÖ½âÊͲÙ×÷£¬½âÊÍÒ»°ãÒªµÝ¹éµØµ÷Óñíʾ´ÓR1µ½RnµÄÄÇЩ¶ÔÏóµÄ½âÊͲÙ×÷
¡¡¡¡4) ÉÏÏÂÎÄ£¨»·¾³£©½ÇÉ«£º°üº¬½âÊÍÆ÷Ö®ÍâµÄһЩȫ¾ÖÐÅÏ¢¡£
¡¡¡¡5) ¿Í»§½ÇÉ«£º
¡¡¡¡a) ¹¹½¨£¨»òÕß±»¸ø¶¨£©±íʾ¸ÃÎÄ·¨¶¨ÒåµÄÓïÑÔÖеÄÒ»¸öÌØ¶¨µÄ¾ä×ӵijéÏóÓï·¨Ê÷
¡¡¡¡b) µ÷ÓýâÊͲÙ×÷
¡¡¡¡·ÅÉÏÕŽâÊÍÆ÷½á¹¹Ààͼ°É£¬ÕâÒ²ÊÇÀ´×ÔÓÚGOFµÄÊéÖС£
¡¡¡¡¶Ôÿһ¸ö½ÇÉ«¶¼¸ø³öÁËÏêϸµÄÖ°Ô𣬶øÇÒÔÚÀàͼÖиø³öÎå¸ö½Çɫ֮¼äµÄ¹ØÏµ¡£ÕâÑùʵÏÖÆðÀ´Ò²²»ÊǺÜÀ§ÄÑÁË£¬ÏÂÃæ¾ÙÁËÒ»¸ö¼òµ¥µÄÀý×Ó£¬Ï£ÍûÄܼÓÉîÄã¶Ô½âÊÍÆ÷ģʽµÄÀí½â¡£
¡¡¡¡Èý¡¢¾ÙÀý
¡¡¡¡À´¾ÙÒ»¸ö¼Ó¼õ³Ë³ýµÄÀý×Ó°É£¬ÊµÏÖ˼·À´×ÔÓÚ¡¶javaÓëģʽ¡·ÖеÄÀý×Ó¡£Ã¿¸ö½ÇÉ«µÄ¹¦Äܰ´ÕÕÉÏÃæÌáµ½µÄ¹æ·¶À´ÊµÏÖ¡£
//ÉÏÏÂÎÄ£¨»·¾³£©½ÇÉ«£¬Ê¹Ó**ashMapÀ´´æ´¢±äÁ¿¶ÔÓ¦µÄÊýÖµ
class Context { ¡¡private Map valueMap = new HashMap(); ¡¡public void addValue(Variable x , int y) ¡¡{ ¡¡¡¡Integer yi = new Integer(y); ¡¡¡¡valueMap.put(x , yi); ¡¡}
¡¡public int LookupValue(Variable x) ¡¡{ ¡¡¡¡int i = ((Integer)valueMap.get(x)).intValue(); ¡¡¡¡return i ; ¡¡} }
//³éÏó±í´ïʽ½ÇÉ«£¬Ò²¿ÉÒÔÓýӿÚÀ´ÊµÏÖ
abstract class Expression { ¡¡public abstract int interpret(Context con); }
//ÖÕ½á·û±í´ïʽ½ÇÉ«
class Constant extends Expression { ¡¡private int i ; ¡¡public Constant(int i) ¡¡{ ¡¡¡¡this.i = i; ¡¡}
¡¡public int interpret(Context con) ¡¡{ ¡¡¡¡return i ; ¡¡} }
class Variable extends Expression { ¡¡public int interpret(Context con) ¡¡{ ¡¡¡¡//thisΪµ÷ÓÃinterpret·½·¨µÄVariable¶ÔÏó ¡¡¡¡return con.LookupValue(this); ¡¡} }
//·ÇÖÕ½á·û±í´ïʽ½ÇÉ«
class Add extends Expression { ¡¡private Expression left ,right ; ¡¡public Add(Expression left , Expression right) ¡¡{ ¡¡¡¡this.left = left ; ¡¡¡¡this.right= right ; ¡¡}
¡¡public int interpret(Context con) ¡¡{ ¡¡¡¡return left.interpret(con) + right.interpret(con); ¡¡} }
class Subtract extends Expression { ¡¡private Expression left , right ; ¡¡public Subtract(Expression left , Expression right) ¡¡{ ¡¡¡¡this.left = left ; ¡¡¡¡this.right= right ; ¡¡}
¡¡public int interpret(Context con) ¡¡{ ¡¡¡¡return left.interpret(con) - right.interpret(con); ¡¡}
}
class Multiply extends Expression { ¡¡private Expression left , right ; ¡¡public Multiply(Expression left , Expression right) ¡¡{ ¡¡¡¡this.left = left ; ¡¡¡¡this.right= right ; ¡¡} ¡¡public int interpret(Context con) ¡¡{ ¡¡¡¡return left.interpret(con) * right.interpret(con); ¡¡} }
class Division extends Expression { ¡¡private Expression left , right ; ¡¡public Division(Expression left , Expression right) ¡¡{ ¡¡¡¡this.left = left ; ¡¡¡¡this.right= right ; ¡¡}
¡¡public int interpret(Context con) ¡¡{ ¡¡¡¡try{ ¡¡¡¡¡¡return left.interpret(con) / right.interpret(con); ¡¡¡¡}catch(ArithmeticException ae) ¡¡¡¡{ ¡¡¡¡¡¡System.out.println("±»³ýÊýΪ0£¡"); ¡¡¡¡¡¡return -11111; ¡¡¡¡} ¡¡} }
//²âÊÔ³ÌÐò£¬¼ÆËã (a*b)/(a-b+2)
public class Test { ¡¡private static Expression ex ; ¡¡private static Context con ; ¡¡public static void main(String[] args) ¡¡{ ¡¡¡¡con = new Context(); ¡¡¡¡//ÉèÖñäÁ¿¡¢³£Á¿ ¡¡¡¡Variable a = new Variable(); ¡¡¡¡Variable b = new Variable(); ¡¡¡¡Constant c = new Constant(2); ¡¡¡¡//Ϊ±äÁ¿¸³Öµ ¡¡¡¡con.addValue(a , 5); ¡¡¡¡con.addValue(b , 7); ¡¡¡¡//ÔËË㣬¶Ô¾ä×ӵĽṹÓÉÎÒÃÇ×Ô¼ºÀ´·ÖÎö£¬¹¹Ôì ¡¡¡¡ex = new Division(new Multiply(a , b), new Add(new Subtract(a , b) , c)); ¡¡¡¡System.out.println("ÔËËã½á¹ûΪ£º"+ex.interpret(con)); ¡¡} } | ¡¡¡¡½âÊÍÆ÷ģʽ²¢Ã»ÓÐ˵Ã÷ÈçºÎ´´½¨Ò»¸ö³éÏóÓï·¨Ê÷£¬Òò´ËËüµÄʵÏÖ¿ÉÒÔ¶àÖÖ¶àÑù£¬ÔÚÉÏÃæÎÒÃÇÊÇÖ±½ÓÔÚTestÖÐÌṩµÄ£¬µ±È»»¹ÓиüºÃ¡¢¸üרҵµÄʵÏÖ·½Ê½¡£
¡¡¡¡¶ÔÓÚÖÕ½á·û£¬GOF½¨Òé²ÉÓÃÏíԪģʽÀ´¹²ÏíËüÃǵĿ½±´£¬ÒòΪËüÃÇÒª¶à´ÎÖØ¸´³öÏÖ¡£µ«ÊÇ¿¼Âǵ½ÏíԪģʽµÄʹÓþÖÏÞÐÔ£¬ÎÒ½¨Ò黹Êǵ±ÄãµÄϵͳÖÐÖÕ½á·ûÖØ¸´µÄ×ã¹»¶àµÄʱºòÔÙ¿¼ÂÇÏíԪģʽ¡£
¡¡¡¡ËÄ¡¢ÓÅȱµã
¡¡¡¡½âÊÍÆ÷ģʽÌṩÁËÒ»¸ö¼òµ¥µÄ·½Ê½À´Ö´ÐÐÓï·¨£¬¶øÇÒÈÝÒ×Ð޸ĻòÕßÀ©Õ¹Óï·¨¡£Ò»°ãϵͳÖкܶàÀàʹÓÃÏàËÆµÄÓï·¨£¬¿ÉÒÔʹÓÃÒ»¸ö½âÊÍÆ÷À´´úÌæÎªÃ¿Ò»¸ö¹æÔòʵÏÖÒ»¸ö½âÊÍÆ÷¡£¶øÇÒÔÚ½âÊÍÆ÷Öв»Í¬µÄ¹æÔòÊÇÓɲ»Í¬µÄÀàÀ´ÊµÏֵģ¬ÕâÑùʹµÃÌí¼ÓÒ»¸öеÄÓï·¨¹æÔò±äµÃ¼òµ¥¡£
¡¡¡¡µ«ÊǽâÊÍÆ÷ģʽ¶ÔÓÚ¸´ÔÓÎÄ·¨ÄÑÒÔά»¤¡£¿ÉÒÔÏëÏóһϣ¬Ã¿Ò»¸ö¹æÔòÒª¶ÔÓ¦Ò»¸ö´¦ÀíÀ࣬¶øÇÒÕâЩÀ໹ҪµÝ¹éµ÷ÓóéÏó±í´ïʽ½ÇÉ«£¬¶àÈçÂÒÂéµÄÀཻ֯ÔÚÒ»ÆðÊǶàô¿Ö²ÀµÄÒ»¼þʰ¡£¡
¡¡¡¡Îå¡¢×ܽá
¡¡¡¡ÕâÑù¶Ô½âÊÍÆ÷ģʽӦ¸ÃÓÐÁËЩ´óÌåµÄÈÏʶÁ˰ɣ¬ÓÉÓÚÕâ¸öģʽʹÓõݸÀýØÑ·¦£¬ËùÒÔ±¾ÎĴ󲿷ֹ۵ãÖ±½ÓÀ´×ÔÓÚGOFµÄÔÖø¡£Ö»ÊÇʵÀý´úÂëÊÇÇ××ÔʵÏÖ²¢µ÷ÊÔͨ¹ýµÄ¡£

|
|
Ïà¹ØÎÄÕ£ºÏà¹ØÈí¼þ£º |
|