Java23种设计模式
定义:一种语法分析工具,用来分步解释一个复杂的运算过程,复杂运算拆分成多个小运算。
需求:计算(1+2)*(3+4)的值。
必备元素:
- 抽象解释器:声明所有表达式都要实现的方法。(接口)
- 终结符表达式:复杂运算的最小单元(例子中的1+2和3+4都是)
- 非终结符表达式:计算终结符表达式的表达式(例子中的*操作)
- 环境角色:输入1、2、3、4的类。
- 创建解释器接口,里面包含一个解释操作的方法
public interface Expression {
int interpret();
}
- 创建终结符表达式,里面计算加法
public class TerminalExpression implements Expression{
private int a;
private int b;
public TerminalExpression(int a,int b) {
this.a = a;
this.b = b;
}
@Override
public int interpret() {
return a+b;
}
}
- 创建非终结符表达式,里面计算乘法
public class MulExpression implements Expression{
private Expression a;
private Expression b;
public MulExpression(Expression a, Expression b) {
this.a = a;
this.b = b;
}
@Override
public int interpret() {
return a.interpret()*b.interpret();
}
}
- 创建环境角色,因为计算值不复杂,就直接写在Test中。
public class Test {
public static void main(String[] args) {
TerminalExpression a = new TerminalExpression(1,2);
TerminalExpression b = new TerminalExpression(3,4);
MulExpression mulExpression = new MulExpression(a,b);
System.out.print("计算结果为:"+mulExpression.interpret());
}
}
打印结果:
计算结果为:21
- 解释器模式实际使用了递归,使用时候需要谨慎。
- 解释器模式适用于有规律的语句解析,比方手SQL语句。
- 解释器模式适合一些频繁出现的运算,比方说例子中的计算。