解释器模式(图)

解释器模式相关总结如下图(可点击放大):

 结构图如下:

示例:


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元");
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值