东莞做外贸网站公司,网页制作基础教程使用spry构件,有赞短链接生成,做一手楼房的网站18.解释器模式 解释器模式#xff08;Interpreter Pattern#xff09;提供了评估语言的语法或表达式的方式#xff0c;它属于行为型模式。这种模式实现了一个表达式接口#xff0c;该接口解释一个特定的上下文。
解释器模式在我们开发过程中并不常用#xff0c;是个比较小…18.解释器模式 解释器模式Interpreter Pattern提供了评估语言的语法或表达式的方式它属于行为型模式。这种模式实现了一个表达式接口该接口解释一个特定的上下文。
解释器模式在我们开发过程中并不常用是个比较小众的设计模式。这种模式通常被用在 SQL 解析、符号处理引擎等。
什么是符号处理引擎呢举几个例子
强大而又令人望而却步的正则表达式相信大多数程序猿都接触过吧[0-9a-zA-Z]这样一串符号就能够匹配一个由数字和大小写字母组成的字符串。类似的还有XML文件的解析、SQL语句的解析等等。 假设你做了一个机器人可以通过指令告诉它如何执行动作比如向前走10个单位是forward 10向左转是turn left当你输入begin forward 10 turn left forward 5 end 组成的命令给它的终端它就能明白命令的意思向前走10个单位然后左转走5个单位并执行。 在举个简单点的例子正则表达式我们通常用的计算器是一步一步来的比如23-4/2当输入、-/和的时候都会立即响应。但是还有种计算器可以在输入整个公式后一并进行计算这种计算器可以直接输入23-4/2然后回车后直接给出整个式子的结果这种计算器就是“解释型”计算器。
UML用例图
一、先声明一个解释型接口
public interface Expression {double interpret();
}二、终结符表达式
NoArgsConstructor
AllArgsConstructor
Data
public class Num implements Expression {private double number;Overridepublic double interpret() {return number;}
}三、非终结符表达式(分别对应加减乘除)
Data
NoArgsConstructor
AllArgsConstructor
public class Add implements Expression {private Expression left,right;Overridepublic double interpret() {return left.interpret()right.interpret();}
}Data
NoArgsConstructor
AllArgsConstructor
public class Sub implements Expression {private Expression left,right;Overridepublic double interpret() {return left.interpret()-right.interpret();}
}Data
NoArgsConstructor
AllArgsConstructor
public class Mul implements Expression {private Expression left,right;Overridepublic double interpret() {return left.interpret()*right.interpret();}
}Data
NoArgsConstructor
AllArgsConstructor
public class Div implements Expression {private Expression left,right;Overridepublic double interpret() {return left.interpret()/right.interpret();}
}四、测试类
public class InterpretTest {public static void main(String[] args) {Expression a new Num(2),bnew Num(3),cnew Num(4),dnew Num(2);Expression result new Sub(new Add(a,b),new Div(c,d));System.out.println(result.interpret());}
}