设计模式

解释器模式

2019-07-15  本文已影响0人  ppamos

优点

缺点

代码

        public interface Expression
          {
        public boolean interpret(String info);
        }
          public class TerminalExpression implements Expression
    {
        public Set<String> interpretSet = new HashSet<>();

      @Override
      public boolean interpret(String info)
      {
          if(interpretSet.contains(info))
              return true;
          else
              return false;
      }
      public void inject(String[] newInfos){
          if(newInfos!=null)
          {
             for(String var1 : newInfos)
              {
                  interpretSet.add(var1);
              }
          }

      }
      }
public class AndExpression implements  Expression
{
    Expression city=null;
    Expression person=null;
    public AndExpression(Expression city,Expression person){
        this.city=city;
        this.person=person;
    }
    @Override
    public boolean interpret(String info)
    {
        String[] var1 = info.split("的");
        return city.interpret(var1[0])&&person.interpret(var1[1]);
    }
}
public class Context
{
   private String[] citys={"韶关","广州"};
   private String[] persons={"老人","妇女","儿童"};
   private Expression andExpression;
    public Context(){
        Expression city = new TerminalExpression();
        Expression person = new TerminalExpression();
        ((TerminalExpression) city).inject(citys);
        ((TerminalExpression) person).inject(persons);
         andExpression = new AndExpression(city, person);

    }
    public String freeRide(String info){
        boolean ok = andExpression.interpret(info);
        if(ok)
            return "你是"+info+"本次免费";
       return info+",您不是免费人员,本次乘车扣费2元!";
    }
}
public class Demo06
{
    public static void main(String[] args)
    {
        Context context = new Context();
        String var1 = context.freeRide("广州的年轻人");
        System.out.println(var1);
    }
}
广州的年轻人,您不是免费人员,本次乘车扣费2元!
上一篇 下一篇

猜你喜欢

热点阅读