Java 操持模式之解释器模式

打印 上一主题 下一主题

主题 555|帖子 555|积分 1665

Java 操持模式之解释器模式

概述



  • 解释器模式(interpreter):给定一个语言,界说它的文法的一种表示,并界说一个解释器,这个解释器利用该表示来解释语言中的句子。
  • 假如一种特定类型的问题发生的频率足够高,那么大概就值得将该问题的各个实例表述为一个简朴语言中的句子。如许就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
UML




  • AbstractExpression:表达式接口,界说解释举动。
  • TerminalExpression:终结符表达式,直接返回一个值。
  • NonterminalExpression:非终结符表达式,包含其他表达式并组合它们。
  • Context:上下文环境类。
代码实现

界说解释器接口:
  1. public interface Expression {
  2.     int interpret();
  3. }
复制代码
界说终端解释器类:
  1. public class NumberExpression implements Expression {
  2.     private int number;
  3.     public NumberExpression(int number) {
  4.         this.number = number;
  5.     }
  6.     @Override
  7.     public int interpret() {
  8.         return number;
  9.     }
  10. }
复制代码
界说非终端解释器类:
  1. // 加法表达式
  2. public class AddExpression implements Expression {
  3.     private Expression leftExpression;
  4.     private Expression rightExpression;
  5.     public AddExpression(Expression leftExpression, Expression rightExpression) {
  6.         this.leftExpression = leftExpression;
  7.         this.rightExpression = rightExpression;
  8.     }
  9.     @Override
  10.     public int interpret() {
  11.         return leftExpression.interpret() + rightExpression.interpret();
  12.     }
  13. }
复制代码
  1. // 减法表达式
  2. public class SubtractExpression implements Expression {
  3.     private Expression leftExpression;
  4.     private Expression rightExpression;
  5.     public SubtractExpression(Expression leftExpression, Expression rightExpression) {
  6.         this.leftExpression = leftExpression;
  7.         this.rightExpression = rightExpression;
  8.     }
  9.     @Override
  10.     public int interpret() {
  11.         return leftExpression.interpret() - rightExpression.interpret();
  12.     }
  13. }
复制代码
利用:
  1. public class Client {
  2.     public static void main(String[] args) {
  3.         NumberExpression numberExpression1 = new NumberExpression(1);
  4.         NumberExpression numberExpression2 = new NumberExpression(2);
  5.         NumberExpression numberExpression3 = new NumberExpression(5);
  6.         Expression addExpression = new AddExpression(numberExpression1, numberExpression2);
  7.         Expression subtractExpression = new SubtractExpression(addExpression, numberExpression3);
  8.         int result = subtractExpression.interpret();
  9.         System.out.println("result: " + result);
  10.     }
  11. }
复制代码
输出:
  1. result: -2
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

星球的眼睛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表