# if_else太多,如何重构
整体思路如下:
- 定义一个 InnerCommand 接口,其中有一个 process 函数交给具体的业务实现。
- 根据自己的业务,会有多个类实现 InnerCommand 接口;这些实现类都会注册到 Spring Bean 容器中供之后使用。
- 通过客户端输入命令,从 Spring Bean 容器中获取一个 InnerCommand 实例。
- 执行最终的 process 函数。
@Component
public class InnerCommandContext {
private final static Logger LOGGER = LoggerFactory.getLogger(InnerCommandContext.class);
/**
* 获取执行器实例
* @param command 执行器实例
* @return
*/
public InnerCommand getInstance(String command) {
Map<String, String> allClazz = SystemCommandEnum.getAllClazz();
//兼容需要命令后接参数的数据 :q cross
String[] trim = command.trim().split(" ");
String clazz = allClazz.get(trim[0]);
InnerCommand innerCommand = null;
try {
if (StringUtil.isEmpty(clazz)){
clazz = PrintAllCommand.class.getName() ;
}
innerCommand = (InnerCommand) SpringBeanFactory.getBean(Class.forName(clazz));
} catch (Exception e) {
LOGGER.error("Exception", e);
}
return innerCommand;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30