您好,欢迎来到二三四教育网。
搜索
您的当前位置:首页Java设计模式 - 解释器模式

Java设计模式 - 解释器模式

来源:二三四教育网

定义

解释器模式是很少用到的一种设计模式,它主要定义了对特定文法的表现形式,并对其进行解析。

解释器模式的简单定义:

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

实现

解释器模式较少使用,在实际开发中也不是很常见,这里利用枚举简单实现一个解释器模式。

首先定义加减乘除的枚举:

public enum Calc {
    PLUS {
        @Override
        public int exec(int l, int r) {
            return l + r;
        }
    },

    MULTI {
        @Override
        public int exec(int l, int r) {
            return l * r;
        }
    },

    MINUS {
        @Override
        public int exec(int l, int r) {
            return l - r;
        }
    },

    DIVIDE {
        @Override
        public int exec(int l, int r) {
            return l / r;
        }
    };

    public abstract int exec(int l, int r);
}

四个元素分别代表加减乘除四种运算,后续会对具体的文法进行解释并指定目标解释器。

public class Client {

    public static void main(String[] args) {
        int n = exec('+', 8, 4);
        System.out.println(n);
    }

    private static int exec(char exp, int l, int r) {
        switch (exp) {
            case '+':
                return Calc.PLUS.exec(l, r);

            case '-':
                return Calc.MINUS.exec(l, r);

            case '*':
                return Calc.MULTI.exec(l, r);

            case '/':
                return Calc.DIVIDE.exec(l, r);

        }

        return -1;
    }
}

通过 exec 方法传入一个加减乘除的符号,来指定具体的解释器,并执行相应的计算。

总结

解释器模式一种扩展性很好的设计模式,但是复杂的文法势必导致过多的解释器,从而引起后续维护成本较高。所以,对于较简单的文法,可以利用解释器模式增强扩展性;而对于较复杂的文法,则尽量避免使用解释器模式。

Java、Android 中会经常遇到 XXParse、Formatter 等 Class,深入了解之后,你会发现内部都或多或少地使用了解释器模式。

Copyright © 2019- how234.cn 版权所有 赣ICP备2023008801号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务