想实现一个sql查询条件and和or的组合,有如下要求:通过设计一个接口Filter以 及 它 的 三 个 实 现 类AttributeFilter、LogicAndFilter、LogicOrFilter利用Composite设计模式把任何查询条件组织成一棵二叉树,利用Visitor设计模式通过遍历二叉树就可以还原查询条件,Filter的接口定义为
public interface Filter{
public String getWhereClause()
public void acceptVisitor(FilterVisitor visitor)
}如果能做到简单的sql查询中的where 条件中的and 和or ?
谢谢!

解决方案 »

  1.   

    关键是2叉树的生成:考虑到and,or 的优先级,and加到叶子节点,or加到根节点;
    遇到()号的处理:把括号里的句子提出,单独先构成一棵2叉树;
    把这个2叉树当成一个整体加到原句子生成树中!还有注意括号匹配问题~over
      

  2.   

    谢谢,jihanzhong(逍遥) 我是一名在校的学生,在学习这方面的知识,谢谢您的指教!其他高手还有没有更具体的想法?请不吝赐教!十分感谢!
      

  3.   

    to  jihanzhong(逍遥)
    那么属性应该如何放置呢?也就是字段该如何放置?还能详细点吗?十分感谢!
      

  4.   

    class testNode{
        testNode left=null;  
        testNode right=null;  
        String opr=null;//不是叶子节点,存放逻辑算术运算
        String val=null;//是叶子节点,存放字段名
    }//ps: String opr和String val其实可以合并!
      

  5.   

    比如:            and
                 or        and
             a       b  c       d
    其实就是 a or b and ( c and d)String val=null;//是叶子节点,存放字段名,应该是原子布耳表达式