Java 操持模式之解释器模式
概述
- 解释器模式(interpreter):给定一个语言,界说它的文法的一种表示,并界说一个解释器,这个解释器利用该表示来解释语言中的句子。
- 假如一种特定类型的问题发生的频率足够高,那么大概就值得将该问题的各个实例表述为一个简朴语言中的句子。如许就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
UML
- AbstractExpression:表达式接口,界说解释举动。
- TerminalExpression:终结符表达式,直接返回一个值。
- NonterminalExpression:非终结符表达式,包含其他表达式并组合它们。
- Context:上下文环境类。
代码实现
界说解释器接口:
- public interface Expression {
- int interpret();
- }
复制代码 界说终端解释器类:
- public class NumberExpression implements Expression {
- private int number;
- public NumberExpression(int number) {
- this.number = number;
- }
- @Override
- public int interpret() {
- return number;
- }
- }
复制代码 界说非终端解释器类:
- // 加法表达式
- public class AddExpression implements Expression {
- private Expression leftExpression;
- private Expression rightExpression;
- public AddExpression(Expression leftExpression, Expression rightExpression) {
- this.leftExpression = leftExpression;
- this.rightExpression = rightExpression;
- }
- @Override
- public int interpret() {
- return leftExpression.interpret() + rightExpression.interpret();
- }
- }
复制代码- // 减法表达式
- public class SubtractExpression implements Expression {
- private Expression leftExpression;
- private Expression rightExpression;
- public SubtractExpression(Expression leftExpression, Expression rightExpression) {
- this.leftExpression = leftExpression;
- this.rightExpression = rightExpression;
- }
- @Override
- public int interpret() {
- return leftExpression.interpret() - rightExpression.interpret();
- }
- }
复制代码 利用:
- public class Client {
- public static void main(String[] args) {
- NumberExpression numberExpression1 = new NumberExpression(1);
- NumberExpression numberExpression2 = new NumberExpression(2);
- NumberExpression numberExpression3 = new NumberExpression(5);
- Expression addExpression = new AddExpression(numberExpression1, numberExpression2);
- Expression subtractExpression = new SubtractExpression(addExpression, numberExpression3);
- int result = subtractExpression.interpret();
- System.out.println("result: " + result);
- }
- }
复制代码 输出:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |