主菜单优化

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 org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
@@ -23,21 +21,15 @@ import java.util.Scanner;
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<Class<? extends AbstractMenuHandler>, AbstractMenuHandler> handlerInstanceMap = new HashMap<>();
private final ScanHandler scanHandler;
private final MyBatisHandler myBatisHandler;
private final BatchHandler batchHandler;
@@ -52,18 +44,34 @@ public class MenuRunner {
this.batchHandler = batchHandler;
this.gitHealthHandler = gitHealthHandler;
// 初始化处理器实例映射
initHandlerInstanceMap();
// 注册菜单处理器
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() {
handlerMap.put(1, scanHandler);
handlerMap.put(2, myBatisHandler);
handlerMap.put(3, batchHandler);
handlerMap.put(4, gitHealthHandler);
for (MenuItem item : MenuItem.values()) {
if (item.hasHandler()) {
AbstractMenuHandler handler = handlerInstanceMap.get(item.getHandlerClass());
if (handler != null) {
handlerMap.put(item.getCode(), handler);
}
}
}
info("菜单处理器注册完成");
}
@@ -77,12 +85,12 @@ public class MenuRunner {
info("启动主菜单");
while (true) {
printMenuTitle("主菜单");
displayMenu(MAIN_MENU_OPTIONS);
displayMenu();
int choice = readChoice(scanner);
scanner.nextLine();
if (choice == 0) {
if (choice == MenuItem.EXIT.getCode()) {
info("用户退出系统");
System.out.println("感谢使用,再见!");
break;
@@ -120,9 +128,11 @@ public class MenuRunner {
/**
* 显示菜单选项
*/
private void displayMenu(String[] options) {
private void displayMenu() {
System.out.println("请选择操作:");
Arrays.stream(options).forEach(System.out::println);
for (MenuItem item : MenuItem.values()) {
System.out.println(item.getDisplayText());
}
}
/**