如何用面向对象的方法来描述四则运算表达式
四则运算表达式的例子是 1 + 5,或者是 ( 2 + 6 ) / ( 4 - 2 )。
如何用面向对象的方法来描述四则运算表达式.
分析如下:
看起来有三个对象 数值 ,运算符,表达式(如1+5,( 2 + 6 ) / ( 4 - 2 )都是表达式),因为数值和
和表达式拥有一样的特性,都是靠运算符连接起来,可提出公共接口(在没有把数值和表达式的关系找到的时候,我的思考完全进行不下去).
Biao.java 表达式接口
BiaoB.java 非数值表达式 实现Biao.java
BiaoValue.java 数值表达式 实现Biao.java
Fu.java 运算符接口
FuPlus.java 加运算符 实现Fu.java
FuC.java 乘运算符 实现Fu.java
FuJ.java 减运算符 实现Fu.java
测试 5- 2*(3+4)
class Main {
public static void main(String[] a) {
Fu plusFu = new FuPlus();
Biao bV1 = new BiaoValue(3);
Biao bV2 = new BiaoValue(4);
Biao b = new BiaoB(bV1,bV2,plusFu); //3+4
System.out.println("==="+b.result());
Biao bV3 = new BiaoValue(2);
Biao bb = new BiaoB(bV3,b,new FuC()); //2*(3+4)
System.out.println("==="+bb.result());
Biao bV4= new BiaoValue(5);
Biao bbb = new BiaoB(bV4,bb,new FuJ()); 5- 2*(3+4)
System.out.println("==="+bbb.result());
}
}
类代码:
interface Biao{
int result() ;
}
class BiaoB implements Biao {
Biao b1;
Biao b2;
Fu fu;
BiaoB(Biao b1,Biao b2,Fu fu){
this.b1 = b1;
this.b2 = b2;
this.fu = fu;
}
public int result() {
if(fu==null) return b1.result();
return fu.result(b1,b2);
}
}
class BiaoValue implements Biao {
int i;
BiaoValue(int i){
this.i = i;
}
public int result() {
return i;
}
}
interface Fu {
int result(Biao b1,Biao b2);
}
public class FuC implements Fu{
public int result(Biao b1,Biao b2) {
return b1.result() * b2.result();
}
}
public class FuJ implements Fu{
public int result(Biao b1,Biao b2) {
return b1.result() - b2.result();
}
}
class FuPlus implements Fu{
public int result(Biao b1,Biao b2) {
return b1.result() + b2.result();
}
}