设计模式之解释器模式

作者: 爱红旗渠 | 来源:发表于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