美文网首页
解释器模式

解释器模式

作者: 阳光的技术小栈 | 来源:发表于2018-01-22 15:14 被阅读15次

    使用解释器模式为语言创建解释器。

    示例

    我们将创建一个接口 Expression 和实现了 Expression 接口的实体类。定义作为上下文中主要解释器的 TerminalExpression 类。其他的类 OrExpression、AndExpression 用于创建组合式表达式。

    InterpreterPatternDemo,我们的演示类使用 Expression 类创建规则和演示表达式的解析。

    UML图表示

    生成器模式

    代码演示

    创建一个表达式接口
    Expression.java

    public interface Expression {
       public boolean interpret(String context);
    }
    

    创建实现了上述接口的实体类
    TerminalExpression.java

    public class TerminalExpression implements Expression {
        
       private String data;
    
       public TerminalExpression(String data){
          this.data = data; 
       }
    
       @Override
       public boolean interpret(String context) {
          if(context.contains(data)){
             return true;
          }
          return false;
       }
    }
    

    OrExpression.java

    public class OrExpression implements Expression {
         
       private Expression expr1 = null;
       private Expression expr2 = null;
    
       public OrExpression(Expression expr1, Expression expr2) { 
          this.expr1 = expr1;
          this.expr2 = expr2;
       }
    
       @Override
       public boolean interpret(String context) {        
          return expr1.interpret(context) || expr2.interpret(context);
       }
    }
    

    AndExpression.java

    public class AndExpression implements Expression {
         
       private Expression expr1 = null;
       private Expression expr2 = null;
    
       public AndExpression(Expression expr1, Expression expr2) { 
          this.expr1 = expr1;
          this.expr2 = expr2;
       }
    
       @Override
       public boolean interpret(String context) {        
          return expr1.interpret(context) && expr2.interpret(context);
       }
    }
    

    测试代码
    InterpreterPatternDemo.java

    public class InterpreterPatternDemo {
    
       //规则:Robert 和 John 是男性
       public static Expression getMaleExpression(){
          Expression robert = new TerminalExpression("Robert");
          Expression john = new TerminalExpression("John");
          return new OrExpression(robert, john);        
       }
    
       //规则:Julie 是一个已婚的女性
       public static Expression getMarriedWomanExpression(){
          Expression julie = new TerminalExpression("Julie");
          Expression married = new TerminalExpression("Married");
          return new AndExpression(julie, married);        
       }
    
       public static void main(String[] args) {
          Expression isMale = getMaleExpression();
          Expression isMarriedWoman = getMarriedWomanExpression();
    
          System.out.println("John is male? " + isMale.interpret("John"));
          System.out.println("Julie is a married women? " 
          + isMarriedWoman.interpret("Married Julie"));
       }
    }
    

    测试结果

    John is male? true
    Julie is a married women? true
    

    相关文章

      网友评论

          本文标题:解释器模式

          本文链接:https://www.haomeiwen.com/subject/utwloxtx.html