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