美文网首页爱编程,爱生活
Java设计模式<过滤模式>

Java设计模式<过滤模式>

作者: 熬夜的猫头鹰 | 来源:发表于2018-06-16 15:26 被阅读11次

Java设计模式<过滤模式>

意图

这种模式允许开发人员使用不同的标准来过滤一组对象

场景

在开JDBC开发中经常有这样的场景,需要拼接SQL

代码


public class Person {

    private String name;

    private String sex;

    private float height;

    private float weight;

    public Criteria createCriteria() {
        return new Criteria();
    }

    public static class Criteria {
        protected List<String> criteriaWithoutValue;

        public Criteria() {
            this.criteriaWithoutValue = new ArrayList<String>();
        }

        public void addCriterion(String condition) {
            if (condition == null) {
                throw new RuntimeException("Value for condition cannot be null");
            }
            criteriaWithoutValue.add(condition);
        }

        public Criteria andNameIsNotNull() {
            addCriterion(String.format("  NAME IS NOT NULL "));
            return this;
        }

        public Criteria andeightGreaterThan(float height) {
            addCriterion(String.format("   HEIGHT > %s  ",height) );
            return this;
        }

        public String getSql() {
            StringBuffer sb = new StringBuffer("SELECT * FROM  PERSON WHERE ");
            for (int i = 0 ;i<criteriaWithoutValue.size();i++) {
                sb.append(criteriaWithoutValue.get(i));
                if(i < criteriaWithoutValue.size()-1){
                    sb.append("AND");
                }
            }
            sb.append(";");
            return sb.toString();
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public float getHeight() {
        return height;
    }

    public void setHeight(float height) {
        this.height = height;
    }

    public float getWeight() {
        return weight;
    }

    public void setWeight(float weight) {
        this.weight = weight;
    }
}

测试类

public class DemoMain {
    public static void main(String[] args) {

        Person p = new Person();
        String sql = p.createCriteria().andNameIsNotNull().andeightGreaterThan(150f).getSql();
        System.err.println(sql);
    }
}

例子中并没有只是单纯的举个例子,结合实际场景才是好用的

相关文章

  • Java设计模式<过滤模式>

    Java设计模式<过滤模式> 意图 这种模式允许开发人员使用不同的标准来过滤一组对象 场景 在开JDBC开发中经常...

  • Java设计模式<组合模式>

    Java设计模式<组合模式> 意图 对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和...

  • Java设计模式<模板模式>

    Java设计模式<模板模式> 意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改...

  • Java设计模式<命令模式>

    Java设计模式<命令模式> 意图 将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化 使用场景 ...

  • Java设计模式<策略模式>

    Java设计模式<策略模式> 意图 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换 解决的问题 在...

  • Java设计模式<代理模式>

    Java设计模式<代理模式> 意图 限制对象的访问控制 客户端无需知道代理的对象 和装饰模式的共同点 都能对现有的...

  • Java设计模式<单例模式>

    Java设计模式<单例模式> 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点 优点 在内存里只有一个实...

  • Java设计模式<享元模式>

    Java设计模式<享元模式> 意图 运用共享技术有效地支持大量细粒度的对象 解决问题 在有大量对象时,有可能会造成...

  • Java设计模式<原型模式>

    Java设计模式<原型模式> 意图 原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思...

  • Java设计模式<装饰器模式>

    Java设计模式<装饰器模式> 意图 态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为...

网友评论

    本文标题:Java设计模式<过滤模式>

    本文链接:https://www.haomeiwen.com/subject/vrjbeftx.html