解释器模式

作者: ppamos | 来源:发表于2019-07-15 21:41 被阅读0次

优点

  • 解释器模式是一种类行为型模式,其主要优点如下。
    扩展性好。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。
    容易实现。在语法树中的每个表达式节点类都是相似的,所以实现其文法较为容易。

缺点

  • 解释器模式的主要缺点如下。
    执行效率较低。解释器模式中通常使用大量的循环和递归调用,当要解释的句子较复杂时,其运行速度很慢,且代码的调试过程也比较麻烦。
    会引起类膨胀。解释器模式中的每条规则至少需要定义一个类,当包含的文法规则很多时,类的个数将急剧增加,导致系统难以管理与维护。
    可应用的场景比较少。在软件开发中,需要定义语言文法的应用实例非常少,所以这种模式很少被使用到。

代码

  • 抽象的表达式角色
        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元!

相关文章

  • 第5章 -行为型模式-解释器模式(终)

    一、解释器模式的简介 二、解释器模式的优缺点 三、解释器模式的实例

  • 17.解释器模式(行为型)

    解释器模式(行为型) 解释器模式很难学,使用率很低! 一、相关概念 1). 解释器模式概述 解释器模式是一种使用频...

  • 解释器模式

    一、解释器模式介绍 二、解释器模式代码实例

  • 解释器模式

    解释器模式 解释器模式的定义 解释器模式(Interpreter Pattern)是一种按照规定语法进行解析的方案...

  • 行为型模式:解释器模式

    原文首发:行为型模式:解释器模式 十一大行为型模式之十:解释器模式。 简介 姓名 :解释器模式英文名 :Inter...

  • 折腾Java设计模式之解释器模

    解释器模式 解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器...

  • 设计模式[22]-解释器模式-Interpreter Patte

    1.解释器模式简介 解释器模式(Interpreter Pattern)模式是行为型(Behavioral)设计模...

  • 解释器模式

    今天和大家分享的模式是解释器模式。 首先介绍一下解释器模式适合解决哪类问题。 其实,解释器模式需要解决的问题是,如...

  • 解释器模式

    1. 解释器模式 1.1 定义: 解释器模式(Interpreter) : 定义一种文法的表示,并定义一种解释器...

  • 设计模式解释器模式

    解释器模式的定义 解释器模式 (Interpreter Pattern):定义一个语言的文法,并且建立一个解释器来...

网友评论

    本文标题:解释器模式

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