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
当使用循环和开关对某些动作进行排序时,会发生反模式,这些动作可能只是作为程序中的语句排序(实际上让处理器的循环开关称为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.