主菜单优化

This commit is contained in:
张家训
2026-02-26 18:22:15 +08:00
parent e281b21bfd
commit 1c01ba9824
@@ -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());
}
} }
/** /**