过滤器模式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);

    }
}

 

posted on 2021-12-13 10:59  无心睡眠A8  阅读(207)  评论(0)    收藏  举报