如何避免循环切换反模式

Jav*_*per 0 java loops design-patterns strategy-pattern switch-statement

我正在编写一个正则表达式解析器,其中一个循环切换反模式似乎是唯一的方法.请忽略实际的解析规则,因为这个解析逻辑只是为内部应用程序定制的,并且不同于常用.

 public static boolean match(String regex, String str) {
        int i = 0;
        int j = 0;

        while ((i < regex.length() && j < str.length())) {

            switch(regex.charAt(i)) {

            case '.' : i++; j++; break;

            case '*' : // do something ; break

            default  : if (regex.charAt(i) != str.charAt(j)) { return false; }  else {i++; j++};
            }
        }     
   }
Run Code Online (Sandbox Code Playgroud)

在这种情况下如何防止环路开关?是否有任何设计模式用于此目的?

Kaz*_*Kaz 11

这不是Loop-Switch Anti-Pattern!

当使用循环和开关对某些动作进行排序时,会发生反模式,这些动作可能只是作为程序中的语句排序(实际上让处理器的循环开关称为fetch-execute循环处理它):

for (step = 0; step < 3; step++) {
  switch (step) {
  case 0:
    do_the_first_thing();
    break;
  case 1:
    do_the_second_thing();
    break;
  case 2:
    do_the_third_thing();
    break;
  }
}
Run Code Online (Sandbox Code Playgroud)

代替:

do_the_first_thing();
do_the_second_thing();
do_the_third_thing();
Run Code Online (Sandbox Code Playgroud)

这不会在您的代码中进行.您的代码正在处理正则表达式,因此案例可以按表达式内容隐含的任何顺序执行.

在上述反模式中,事实上的顺序步骤隐藏在逻辑之后,逻辑似乎准备好处理任何执行顺序; 但实际上它不处理任何数据,只处理循环虚拟变量,可预测地从0到2.