优点
- 解释器模式是一种类行为型模式,其主要优点如下。
扩展性好。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。
容易实现。在语法树中的每个表达式节点类都是相似的,所以实现其文法较为容易。 
缺点
- 解释器模式的主要缺点如下。
执行效率较低。解释器模式中通常使用大量的循环和递归调用,当要解释的句子较复杂时,其运行速度很慢,且代码的调试过程也比较麻烦。
会引起类膨胀。解释器模式中的每条规则至少需要定义一个类,当包含的文法规则很多时,类的个数将急剧增加,导致系统难以管理与维护。
可应用的场景比较少。在软件开发中,需要定义语言文法的应用实例非常少,所以这种模式很少被使用到。 
代码
        public interface Expression
          {
        public boolean interpret(String info);
        }
          public class TerminalExpression implements Expression
    {
        public Set<String> interpretSet = new HashSet<>();
      @Override
      public boolean interpret(String info)
      {
          if(interpretSet.contains(info))
              return true;
          else
              return false;
      }
      public void inject(String[] newInfos){
          if(newInfos!=null)
          {
             for(String var1 : newInfos)
              {
                  interpretSet.add(var1);
              }
          }
      }
      }
public class AndExpression implements  Expression
{
    Expression city=null;
    Expression person=null;
    public AndExpression(Expression city,Expression person){
        this.city=city;
        this.person=person;
    }
    @Override
    public boolean interpret(String info)
    {
        String[] var1 = info.split("的");
        return city.interpret(var1[0])&&person.interpret(var1[1]);
    }
}
public class Context
{
   private String[] citys={"韶关","广州"};
   private String[] persons={"老人","妇女","儿童"};
   private Expression andExpression;
    public Context(){
        Expression city = new TerminalExpression();
        Expression person = new TerminalExpression();
        ((TerminalExpression) city).inject(citys);
        ((TerminalExpression) person).inject(persons);
         andExpression = new AndExpression(city, person);
    }
    public String freeRide(String info){
        boolean ok = andExpression.interpret(info);
        if(ok)
            return "你是"+info+"本次免费";
       return info+",您不是免费人员,本次乘车扣费2元!";
    }
}
public class Demo06
{
    public static void main(String[] args)
    {
        Context context = new Context();
        String var1 = context.freeRide("广州的年轻人");
        System.out.println(var1);
    }
}
广州的年轻人,您不是免费人员,本次乘车扣费2元!