过滤器模式Filter或标准模式Criteria

过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准
public class Stall implements Serializable { private Integer id; // 主键 private String num; //编号 private String name; //车位名 private Integer status; //状态0:闲置 1:使用 private Integer cid; // 小区的id private String cname; //小区的名称 private Integer ifdelete; //是否删除 : 0:未删除 1:已删除 private Date createtime; //创建日期 public Integer getId() { return id; }
/** * @Author lcw * @Description 生产的标准接口 * @Date 2021/12/11 */ public interface Criteria { List<Stall> meetCriteria(List<Stall> stallList); }
public class CriteriaIfDelete implements Criteria{ @Override public List<Stall> meetCriteria(List<Stall> stallList) { List<Stall> list = new ArrayList<>(); for (Stall stall : stallList) { if(stall.getIfdelete()==0) { list.add(stall); } } return list; } }
public class CriteriaName implements Criteria{ @Override public List<Stall> meetCriteria(List<Stall> stallList) { List<Stall> list = new ArrayList<>(); for (Stall stall : stallList) { if(stall.getName().equals("XY20200103003")) { list.add(stall); } } return list; } }
/** * @Author lcw * @Description And 条件 :name ifdelete 两个类的条件 * @Date 2021/12/11 */ public class CriteriaAnd implements Criteria { private Criteria criteria1; private Criteria criteria2; public CriteriaAnd(Criteria criteria1, Criteria criteria2) { this.criteria1 = criteria1; this.criteria2 = criteria2; } @Override public List<Stall> meetCriteria(List<Stall> stallList) { List<Stall> stalls = criteria1.meetCriteria(stallList); List<Stall> stalls1 = criteria2.meetCriteria(stalls); return stalls1; } }
public class CriteriaOr implements Criteria { private Criteria criteria1; private Criteria criteria2; public CriteriaOr(Criteria criteria1, Criteria criteria2) { this.criteria1 = criteria1; this.criteria2 = criteria2; } @Override public List<Stall> meetCriteria(List<Stall> stallList) { List<Stall> StallList1 = criteria1.meetCriteria(stallList); List<Stall> StallList2 = criteria2.meetCriteria(stallList); for (Stall stall : StallList2) { if(!StallList1.contains(stall)){ StallList1.add(stall); } } return StallList1; } }
public class TMain { public static void main(String[] args) { List<Stall> stallList =new ArrayList<>(); for (int i = 0; i < 10; i++) { Stall stall = new Stall(); stall.setNum("XY20200103003"); stall.setName("哈哈"+i); stall.setCid(2); stall.setCname("哈哈哈"+i); stall.setIfdelete(0); stall.setCreatetime(new Date()); stall.setStatus(0); stallList.add(stall); } //过滤条件1 Criteria c1 = new CriteriaIfDelete(); //过滤条件2 Criteria c2 = new CriteriaName(); Criteria cand = new CriteriaAnd(c1,c2); Criteria cor = new CriteriaOr(c1,c2); List<Stall> andStalls = cand.meetCriteria(stallList); List<Stall> orStalls = cor.meetCriteria(stallList); System.out.println(andStalls); System.out.println(orStalls); } }
浙公网安备 33010602011771号