Java 设计模式

Java设计模式 - 解释器模式

2017-12-26  本文已影响12人  a57ecf3aaaf2

定义

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

解释器模式的简单定义:

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

实现

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

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

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_ 原创,未经许可,不得转载!

上一篇下一篇

猜你喜欢

热点阅读