import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; // ───────────────────────────────────────────── // Controller // ───────────────────────────────────────────── class CrawlerController { private final ConsoleView view; private final ArticleRepository repo; private final Map commands = new HashMap<>(); private final List history = new ArrayList<>(); CrawlerController(ConsoleView view, ArticleRepository repo, StrategySelector selector) { this.view = view; this.repo = repo; CrawlCommand crawl = new CrawlCommand(view, repo, selector); reg(crawl.getName(), crawl); reg(crawl.getAlias(), crawl); reg(new ListCommand(view, repo)); reg(new AnalyzeCommand(view, repo, selector)); reg(new HistoryCommand(view, history)); reg(new HelpCommand(view)); reg(new ExitCommand(view)); } private void reg(Command cmd) { commands.put(cmd.getName(), cmd); } private void reg(String key, Command cmd) { commands.put(key, cmd); } public void handle(String input) { if (input == null || input.isBlank()) return; history.add(input); String[] parts = input.trim().split("\\s+"); Command cmd = commands.get(parts[0].toLowerCase()); if (cmd == null) view.printError("未知命令:" + parts[0] + "(输入 help)"); else cmd.execute(parts, repo.getAll()); } } // ───────────────────────────────────────────── // Main 入口 // ───────────────────────────────────────────── public class Main { public static void main(String[] args) { ConsoleView view = new ConsoleView(); ArticleRepository repo = new ArticleRepository(); StrategySelector selector = new StrategySelector(); CrawlerController ctrl = new CrawlerController(view, repo, selector); view.printSuccess("Welcome to CLI Crawler W10!"); view.printInfo("输入 help 查看命令。"); while (true) ctrl.handle(view.readLine()); } }