美文网首页Java 设计模式
Java设计模式 - 解释器模式

Java设计模式 - 解释器模式

作者: a57ecf3aaaf2 | 来源:发表于2017-12-26 12:01 被阅读12次

    定义

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

    解释器模式的简单定义:

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

    实现

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

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

    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,深入了解之后,你会发现内部都或多或少地使用了解释器模式。

    本文由 Fynn_ 原创,未经许可,不得转载!

    相关文章

      网友评论

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

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