设计模式之解释器模式

解释器模式(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);
        }
    }

}

设计模式系列:

创建型 结构型 行为型
工厂方法
简单工厂
抽象工厂
建造者模式
单例模式
原型模式
组合模式
外观模式
桥接模式
代理模式
享元模式
适配器模式
装饰模式
策略模式
模板方法
状态模式
观察者模式
备忘录模式
迭代器模式
命令模式
职责链模式
解释器模式
访问者模式
中介者模式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 解释器模式在我看来,应用范围很小,我想了很久,想举一个不是加减乘除运算的例子出来,但是很难......在设计模式一...
    Mock2052阅读 4,553评论 0 1
  • 解释器模式 对每个应用来说,至少有以下两种不同的用户分类。 基本用户:这类用户只希望能够凭直觉使用应用。他们不喜欢...
    英武阅读 5,563评论 0 50
  • 解释器模式 本例想描述一个筛子游戏,假设筛子的范围是一到六这六个中文字,最后判大小,以分号为结尾。输入类型:例(三...
    smallstrong阅读 1,664评论 0 0
  • 默认情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它...
    kevin_cf阅读 2,910评论 0 1
  • 国庆那天的下午,我和妈妈雨与姐姐还有妈妈的朋友去游玩运城著名的旅游景点――舜帝陵。 车子...
    咕咕咕虎阅读 2,350评论 0 0