Luckylau's Blog

设计模式之解释器模式

​ 解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。

​ 下面以2+3-4/2为例子说明:

1
2
3
public interface Expression {
int interpret();
}

对于叶子节点的数字,也就是终结符表达式来说:

1
2
3
4
5
6
7
8
9
10
11
12
public class Num implements Expression {
private int number;
public Num(int number) {
this.number = number;
}
// 返回值就是数字本身
public int interpret() {
return number;
}
}

对于非叶子节点的运算符,也就是非终结符表达式来说,都需要一个左值和右值才能进行解析运算:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Add implements Expression {
private Expression left, right;
public Add(Expression left, Expression right) {
this.left = left;
this.right = right;
}
// 返回值是两个子表达式的值相加
public int interpret() {
return left.interpret() + right.interpret();
}
}

对于减法Sub.java、乘法Mul.java和除法Div.java也是类似的

当进行计算时:

1
2
3
4
5
6
7
8
9
10
11
public class Client {
public static void main(String[] args) {
// 解析 2+3-4/2 的值
Expression a = new Num(2), b = new Num(3),
c = new Num(4), d = new Num(2);
Expression result = new Sub(new Add(a, b), new Div(c, d));
System.out.println(result.interpret());
}
}
Luckylau wechat
如果对您有价值,看官可以打赏的!