多个if else语句的设计方法?

时间:2017-05-05 06:57:41

标签: java design-patterns

我有将sql查询作为字符串返回的方法。这种方法考虑参数' level' ,基于此   参数有多个if else语句,如

   if(level.equals("A1")){
    // add some  field in query
   }
   else if (level.equals("A2"))
   {
    // add some  field  and logic in query
   }
   ..

   so on 

在未来的级别数量会增加,我不想编写讨厌的if语句,所以我正在为这种情况寻找更清晰,可维护的设计方法。    我在考虑策略设计模式,但不确定它是否最适合这种情况。

2 个答案:

答案 0 :(得分:2)

您有几种选择:

  1. A = [1,2,3,4] / if,如您所示。

  2. A switch statement

  3. 一个else if,其中的键是级别字符串,值是功能接口类型(Map或来自java.util.function的适当接口或您自己的接口)的引用您可以根据需要使用method referenceslambdas,匿名类实例或甚至具体的类实例进行初始化。

  4. 这是最后一个选项的示例,使用最基本的功能界面Runnable和方法参考:

    Runnable

答案 1 :(得分:0)

您可以使用enum列出操作并使用valueOf来确定要使用的内容。

enum Levels {
    A1 {
        @Override
        void doSomethingToTheQuery(Query q) {
            // add some  field in query
        }
    },
    A2{
        @Override
        void doSomethingToTheQuery(Query q) {
            // add some  field  and logic in query
        }
    };

    abstract void doSomethingToTheQuery(Query q);
}

public void test() {
    // Lookup the level and do hack the query.
    Levels.valueOf("A1").doSomethingToTheQuery(q);
}

然后,只需添加enum即可添加新关卡。