Java设计模式啦啦哩DesignParttern

设计模式之解释器模式

2018-01-24  本文已影响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);
        }
    }

}

设计模式系列:

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

猜你喜欢

热点阅读