You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

57 lines
1.8 KiB

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Controller: 解析输入、分发命令、维护历史记录
* 严格遵守 MVC:不持有任何 System.out,所有输出走 view
*/
public class CrawlerController {
private final ConsoleView view;
private final List<Article> articles;
private final Map<String, Command> commands = new HashMap<>();
private final List<String> history = new ArrayList<>(); // 作业2
public CrawlerController(ConsoleView view, List<Article> articles) {
this.view = view;
this.articles = articles;
registerCommands();
}
private void registerCommands() {
CrawlCommand crawl = new CrawlCommand(view);
register(crawl.getName(), crawl);
register(crawl.getAlias(), crawl); // 选做:别名 "c"
register(new ListCommand(view));
register(new HelpCommand(view));
register(new ExitCommand(view));
register(new HistoryCommand(view, history)); // 作业2,注入共享 history
}
private void register(Command cmd) {
commands.put(cmd.getName(), cmd);
}
private void register(String key, Command cmd) {
commands.put(key, cmd);
}
/** 处理一行用户输入 */
public void handle(String input) {
if (input == null || input.isBlank()) return;
history.add(input); // 作业2:记录每条命令
String[] parts = input.trim().split("\\s+");
String name = parts[0].toLowerCase();
Command cmd = commands.get(name);
if (cmd == null) {
view.printError("未知命令:" + name + "。输入 help 查看可用命令。");
} else {
cmd.execute(parts, articles);
}
}
}