如何用物件導向的方法來描述四則運算表示式

google314發表於2008-09-10
前幾天面試碰到一道題,當時沒有做,忽然想了起來,如下<BR><BR><BR>四則運算表示式的例子是 1 + 5,或者是 ( 2 + 6 ) / ( 4 - 2 )。<BR><BR>如何用物件導向的方法來描述四則運算表示式.<BR><BR>分析如下: <BR> 看起來有三個物件 數值 ,運算子,表示式(如1+5,( 2 + 6 ) / ( 4 - 2 )都是表示式),因為數值和<BR> 和表示式擁有一樣的特性,都是靠運算子連線起來,可提出公共介面(在沒有把數值和表示式的關係找到的時候,我的思考完全進行不下去).<BR><BR>Biao.java 表示式介面<BR>BiaoB.java 非數值表示式 實現Biao.java<BR>BiaoValue.java 數值表示式 實現Biao.java<BR><BR><BR>Fu.java 運算子介面 <BR>FuPlus.java 加運算子 實現Fu.java<BR>FuC.java 乘運算子 實現Fu.java<BR>FuJ.java 減運算子 實現Fu.java<BR><BR><BR>測試 5- 2*(3+4)<BR>class Main {<BR> public static void main(String[] a) {<BR> Fu plusFu = new FuPlus();<BR> Biao bV1 = new BiaoValue(3);<BR> Biao bV2 = new BiaoValue(4);<BR> Biao b = new BiaoB(bV1,bV2,plusFu); //3+4<BR> System.out.println("==="+b.result());<BR> <BR> <BR> Biao bV3 = new BiaoValue(2);<BR> Biao bb = new BiaoB(bV3,b,new FuC()); //2*(3+4)<BR> System.out.println("==="+bb.result());<BR> <BR> Biao bV4= new BiaoValue(5);<BR> Biao bbb = new BiaoB(bV4,bb,new FuJ()); 5- 2*(3+4)<BR> <BR> System.out.println("==="+bbb.result());<BR> }<BR>}<BR><BR> <BR><BR>類程式碼:<BR><BR> interface Biao{<BR> int result() ;<BR>}<BR><BR> class BiaoB implements Biao {<BR> Biao b1;<BR> Biao b2;<BR> Fu fu;<BR> BiaoB(Biao b1,Biao b2,Fu fu){<BR> this.b1 = b1;<BR> this.b2 = b2;<BR> this.fu = fu;<BR> }<BR> public int result() {<BR> if(fu==null) return b1.result();<BR> return fu.result(b1,b2);<BR> }<BR>}<BR><BR>class BiaoValue implements Biao {<BR> int i;<BR> BiaoValue(int i){<BR> this.i = i;<BR> }<BR> public int result() {<BR> return i;<BR> }<BR>}<BR><BR> <BR><BR>interface Fu {<BR> int result(Biao b1,Biao b2);<BR>}<BR><BR>public class FuC implements Fu{<BR> public int result(Biao b1,Biao b2) {<BR> return b1.result() * b2.result();<BR> }<BR>}<BR><BR>public class FuJ implements Fu{<BR> public int result(Biao b1,Biao b2) {<BR> return b1.result() - b2.result();<BR> }<BR>}<BR>class FuPlus implements Fu{<BR> public int result(Biao b1,Biao b2) {<BR> return b1.result() + b2.result();<BR> }<BR>}<BR><BR>

相關文章