java设计模式15(解释器模式)

2019-08-08  本文已影响0人  刺风有道

解释器模式用于描述如何构成一个简单的语言解释器,主要应用于使用面向对象语言开发的解释器的设计。

解释器模式的定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

在解释器模式的定义中所指的“语言”是使用规定格式和语法的代码,解释器模式是一种类行为型模式。

解释器模式的结构与实现:
1.AbstractExpression(抽象表达式):在抽象表达式中声明了抽象的解释操作,它是所有终结符表达式和非终结符表达式的公共父类。

public abstract class AbstractExpression {
    
    public abstract void interpreter(Context context);

}

2.TerminatorExpression(终结符表达式):终结符表达式是抽象表达式的子类,它实现了与文法中的终结符相关联的解释操作,在句子中的每一个终结符都是该类的一个实例。通常在一个解释器模式中只有少数几个终结符表达式,它们的实例可以通过非终结符表达式组成较为复杂的句子。

public class TerminatorExpression extends AbstractExpression {

    @Override
    public void interpreter(Context context) {
        //解释操作
    }

}

3.NonterminalExpression(非终结符表达式):非终结符表达式也是抽象表达式的子类,它实现了文法中非终结符的解释操作,由于在非终结符表达式中可以包含终结符表达式,也可以继续包含非终结符表达式,因此其解释操作一般通过递归的方式完成。

public class NonterminalExpression extends AbstractExpression {
    
    private AbstractExpression left;
    
    private AbstractExpression right;
    
    public NonterminalExpression(AbstractExpression left,AbstractExpression right) {
        this.left=left;
        this.right=right;
    }

    @Override
    public void interpreter(Context context) {
        //递归调用每一个组成部分的解释操作方法interpreter方法
        Context leftContext=new Context();
        Context rightContext=new Context();
        left.interpreter(leftContext);
        right.interpreter(rightContext);
    }

}

4.Context(环境类):环境类又称为上下文类,用于存储解释器之外的一些全局信息,通常它临时储存了需要解释的语句。

public class Context {

    private HashMap<String, String> map=new HashMap<>();
    
    public void assign(String key,String value) {
        //向环境类中传入内容
        map.put(key, value);
    }
    
    
    public String lookup(String key) {
        //获取内容
        return map.get(key);
    }
}
上一篇下一篇

猜你喜欢

热点阅读