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
articles; private final Map commands = new HashMap<>(); private final List history = new ArrayList<>(); // 作业2 public CrawlerController(ConsoleView view, List
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); } } }