主菜单优化
This commit is contained in:
@@ -8,9 +8,7 @@ import com.example.workutils.menu.handler.ScanHandler;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
@@ -23,21 +21,15 @@ import java.util.Scanner;
|
|||||||
public class MenuRunner {
|
public class MenuRunner {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主菜单选项
|
* 菜单处理器映射 (序号 -> 处理器)
|
||||||
*/
|
|
||||||
private static final String[] MAIN_MENU_OPTIONS = {
|
|
||||||
"1. 关键词扫描",
|
|
||||||
"2. MyBatis导出",
|
|
||||||
"3. 批量处理",
|
|
||||||
"4. Git仓库健康检测",
|
|
||||||
"0. 退出系统"
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 菜单处理器映射
|
|
||||||
*/
|
*/
|
||||||
private final Map<Integer, AbstractMenuHandler> handlerMap = new HashMap<>();
|
private final Map<Integer, AbstractMenuHandler> handlerMap = new HashMap<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理器实例映射 (类 -> 实例)
|
||||||
|
*/
|
||||||
|
private final Map<Class<? extends AbstractMenuHandler>, AbstractMenuHandler> handlerInstanceMap = new HashMap<>();
|
||||||
|
|
||||||
private final ScanHandler scanHandler;
|
private final ScanHandler scanHandler;
|
||||||
private final MyBatisHandler myBatisHandler;
|
private final MyBatisHandler myBatisHandler;
|
||||||
private final BatchHandler batchHandler;
|
private final BatchHandler batchHandler;
|
||||||
@@ -52,18 +44,34 @@ public class MenuRunner {
|
|||||||
this.batchHandler = batchHandler;
|
this.batchHandler = batchHandler;
|
||||||
this.gitHealthHandler = gitHealthHandler;
|
this.gitHealthHandler = gitHealthHandler;
|
||||||
|
|
||||||
|
// 初始化处理器实例映射
|
||||||
|
initHandlerInstanceMap();
|
||||||
// 注册菜单处理器
|
// 注册菜单处理器
|
||||||
registerHandlers();
|
registerHandlers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化处理器实例映射
|
||||||
|
*/
|
||||||
|
private void initHandlerInstanceMap() {
|
||||||
|
handlerInstanceMap.put(ScanHandler.class, scanHandler);
|
||||||
|
handlerInstanceMap.put(MyBatisHandler.class, myBatisHandler);
|
||||||
|
handlerInstanceMap.put(BatchHandler.class, batchHandler);
|
||||||
|
handlerInstanceMap.put(GitHealthHandler.class, gitHealthHandler);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 注册菜单处理器
|
* 注册菜单处理器
|
||||||
*/
|
*/
|
||||||
private void registerHandlers() {
|
private void registerHandlers() {
|
||||||
handlerMap.put(1, scanHandler);
|
for (MenuItem item : MenuItem.values()) {
|
||||||
handlerMap.put(2, myBatisHandler);
|
if (item.hasHandler()) {
|
||||||
handlerMap.put(3, batchHandler);
|
AbstractMenuHandler handler = handlerInstanceMap.get(item.getHandlerClass());
|
||||||
handlerMap.put(4, gitHealthHandler);
|
if (handler != null) {
|
||||||
|
handlerMap.put(item.getCode(), handler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
info("菜单处理器注册完成");
|
info("菜单处理器注册完成");
|
||||||
}
|
}
|
||||||
@@ -77,12 +85,12 @@ public class MenuRunner {
|
|||||||
info("启动主菜单");
|
info("启动主菜单");
|
||||||
while (true) {
|
while (true) {
|
||||||
printMenuTitle("主菜单");
|
printMenuTitle("主菜单");
|
||||||
displayMenu(MAIN_MENU_OPTIONS);
|
displayMenu();
|
||||||
|
|
||||||
int choice = readChoice(scanner);
|
int choice = readChoice(scanner);
|
||||||
scanner.nextLine();
|
scanner.nextLine();
|
||||||
|
|
||||||
if (choice == 0) {
|
if (choice == MenuItem.EXIT.getCode()) {
|
||||||
info("用户退出系统");
|
info("用户退出系统");
|
||||||
System.out.println("感谢使用,再见!");
|
System.out.println("感谢使用,再见!");
|
||||||
break;
|
break;
|
||||||
@@ -120,9 +128,11 @@ public class MenuRunner {
|
|||||||
/**
|
/**
|
||||||
* 显示菜单选项
|
* 显示菜单选项
|
||||||
*/
|
*/
|
||||||
private void displayMenu(String[] options) {
|
private void displayMenu() {
|
||||||
System.out.println("请选择操作:");
|
System.out.println("请选择操作:");
|
||||||
Arrays.stream(options).forEach(System.out::println);
|
for (MenuItem item : MenuItem.values()) {
|
||||||
|
System.out.println(item.getDisplayText());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user