package com.chen.InterpreterPattern; import com.chen.InterpreterPattern.po.AndExpression; import com.chen.InterpreterPattern.po.Expression; import com.chen.InterpreterPattern.po.OrExpression; import com.chen.InterpreterPattern.po.TerminalExpression; /** * 解释器模式触发器 * * @author lx * @date 2021/10/13 9:23 **/ public class InterpreterMain { String[] cityAndFree = new String[]{"杭州", "攀枝花"}; String[] cardAndFree = new String[]{"市民卡", "社保卡"}; String[] workAndFree = new String[]{"税务够年", "已退休"}; String[] allOrFree = new String[]{"孕妇", "退伍军人", "儿童"}; String freeNotice = "滴,免费卡!"; String spendNotice = "滴,扣费一万元!余额不足,请下去!"; String[] customers = new String[]{"已退休的杭州的市民卡", "税务够年的上海的市民卡", "杭州的社保卡的已退休", "成都的退伍军人", "北京的市民卡"}; Expression e; TerminalExpression allOrFreeT; TerminalExpression cityAndFreeT; TerminalExpression cardAndFreeT; TerminalExpression workAndFreeT; public void main() { allOrFreeT = new TerminalExpression(allOrFree); cityAndFreeT = new TerminalExpression(cityAndFree); cardAndFreeT = new TerminalExpression(cardAndFree); workAndFreeT = new TerminalExpression(workAndFree); for (String customer : customers) { System.out.println("欢迎“".concat(customer).concat("”乘车,正在检查你的卡:")); System.out.println(">>>>>>>>>>>>>>>>>>>>>>>".concat(exec(customer))); } } private String exec(String customer) { e = new OrExpression(allOrFreeT, new AndExpression(cityAndFreeT, new AndExpression(cardAndFreeT, workAndFreeT))); return !e.interpret(customer) ? spendNotice : freeNotice; } }