解释器模式相关总结如下图(可点击放大):
结构图如下:
示例:
public class InterpreterTest {
public static void main(String[] args) {
Context bus = new Context();
bus.freeRide("杭州的老人");
bus.freeRide("南京的年轻人");
bus.freeRide("上海的儿童");
bus.freeRide("北京的老人");
}
}
interface Expression {
boolean interpret(String info);
}
//终结符表达式类
class TerminalExpression implements Expression {
private Set<String> set = new HashSet<>();
public TerminalExpression(String[] data) {
set.addAll(Arrays.asList(data));
}
@Override
public boolean interpret(String info) {
if (set.contains(info)){
return true;
}
return false;
}
}
//非终结符表达式类
class NonTerminalExpression implements Expression {
private Expression city;
private Expression persion;
public NonTerminalExpression(Expression city, Expression persion) {
this.city = city;
this.persion = persion;
}
@Override
public boolean interpret(String info) {
String s[] = info.split("的");
return city.interpret(s[0]) && persion.interpret(s[1]);
}
}
class Context {
private String[] citys = {"杭州", "南京", "上海"};
private String[] persons = {"老人", "儿童"};
private Expression cityPerson;
public Context() {
Expression city = new TerminalExpression(citys);
Expression person = new TerminalExpression(persons);
cityPerson = new NonTerminalExpression(city, person);
}
public void freeRide(String info){
boolean ok = cityPerson.interpret(info);
if (ok) {
System.out.println("您是" + info +",您本次乘车免费!");
} else {
System.out.println(info + ",您不是免费人员,本次乘车扣费2元");
}
}
}