设计模式之解释器模式

作者: 爱红旗渠 | 来源:发表于2018-01-24 17:16 被阅读2460次

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

源问地址:http://ihongqiqu.com/2016/09/14/Interpreter-Pattern/

适用场景

  1. 重复发生的问题可以使用解释器模式
  2. 一个简单语法需要解释的场景

优点

  1. 可扩展性比较好,灵活
  2. 增加了新的解释表达式的方式
  3. 易于实现文法

缺点

  1. 执行效率比较低,可利用场景比较少
  2. 对于复杂的文法比较难维护

UML结构图

Interpreter Pattern

源码

抽象表达式,声明一个抽象的解释操作

public interface AbstractExpression {

    public void interpret(Context context);

}

终结符表达式

public class TerminalExpression implements AbstractExpression {

    @Override
    public void interpret(Context context) {
        System.out.println("终端解释器");
    }

}

非终结符表达式

public class NonterminalExpression implements AbstractExpression {

    @Override
    public void interpret(Context context) {
        System.out.println("非终端解释器");
    }

}

包含解释器之外的一些全局信息

public class Context {

    private String input;
    private String output;

    public String getInput() {
        return input;
    }

    public void setInput(String input) {
        this.input = input;
    }

    public String getOutput() {
        return output;
    }

    public void setOutput(String output) {
        this.output = output;
    }
}

客户端调用
解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,
这个解释器使用该表示来解释语言中的句子。

public class Client {

    public static void main(String[] args) {
        Context context = new Context();

        ArrayList<AbstractExpression> list = new ArrayList<AbstractExpression>();
        list.add(new TerminalExpression());
        list.add(new NonterminalExpression());
        list.add(new TerminalExpression());
        list.add(new NonterminalExpression());

        for (AbstractExpression expression : list) {
            expression.interpret(context);
        }
    }

}

设计模式系列:

创建型 结构型 行为型
工厂方法
简单工厂
抽象工厂
建造者模式
单例模式
原型模式
组合模式
外观模式
桥接模式
代理模式
享元模式
适配器模式
装饰模式
策略模式
模板方法
状态模式
观察者模式
备忘录模式
迭代器模式
命令模式
职责链模式
解释器模式
访问者模式
中介者模式

相关文章

网友评论

    本文标题:设计模式之解释器模式

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