解释器模式
本例想描述一个筛子游戏,假设筛子的范围是一到六这六个中文字,最后判大小,以分号为结尾。输入类型:例(三四五;)十二点,大
abstract class AbstractExpression{
Object interpret(String str);
}
抽象解释方法
class TerminalExpression extends AbstractExpression{
public Object interpret(String str){
switch(str){
case "一":
return 1;
break;
case "二":
return 2;
break;
case "三":
return 3;
break;
case "四":
return 4;
break;
case "五":
return 5;
break;
case "六":
return 6;
break;
default:
return 0;
}
}
}
数字解释方法
class NonTerminalExpression extends AbstractExpression{
public Object interpret(String str){
if(";".euqals(str){
return "finish"
}else{
return "finish";
}
}
}
结束解释器
class Calculator{
TerminalExpression terminalExpression = new terminalExpression();
NonTerminalExpression nonTerminalExpression = new NonTerminalExpression();
int sum = 0;
public String calculator(String key){
for(int i = 0;i < 3;i ++){
sum = sum + terminalExpressionin.terpret(key.charAt(i));
}
Log.i("smallstrong",nonTerminalExpression. interpret(key.charAt(3)));
if(sum <= 9){
return "小";
}else{
return "大";
}
}
}
解释器处理类
class Client{
public static void main(String args[]){
Calculator mCalculator = new Calculator();
Log.i("smallstrong",mCalculator.calculator("六六六;"));
}
}
客户端
个人总结
解释器模式这例子很牵强,实际运用也是极少。看了许多大佬们的blog都觉得不是很理解。
正则表达在编译时的处理算是解释器模式比较好的例子。