package controller; import view.ConsoleView; import model.Article; import strategy.*; import command.*; import java.util.ArrayList; import java.util.List; public class CrawlerController { private ConsoleView view; private List
articles; private List strategies; public CrawlerController() { this.view = new ConsoleView(); this.articles = new ArrayList<>(); this.strategies = new ArrayList<>(); strategies.add(new JjwxcStrategy()); strategies.add(new BaiduStrategy()); strategies.add(new HttpBinStrategy()); strategies.add(new BingStrategy()); } public ConsoleView getView() { return view; } public List
getArticles() { return articles; } public void addArticle(Article article) { articles.add(article); } public void clearArticles() { articles.clear(); } public String[] getStrategyNames() { String[] names = new String[strategies.size()]; for (int i = 0; i < strategies.size(); i++) { names[i] = strategies.get(i).getName(); } return names; } public void run() { view.showWelcome(); view.showHelp(); boolean running = true; while (running) { String input = view.getInput(); if (input.isEmpty()) { continue; } switch (input) { case "1": case "jjwxc": executeCommand(new CrawlCommand(strategies.get(0), this)); break; case "2": case "baidu": executeCommand(new CrawlCommand(strategies.get(1), this)); break; case "3": case "httpbin": executeCommand(new CrawlCommand(strategies.get(2), this)); break; case "4": case "bing": executeCommand(new CrawlCommand(strategies.get(3), this)); break; case "all": crawlAll(); break; case "list": executeCommand(new ListCommand(this)); break; case "save": executeCommand(new SaveCommand(this)); break; case "help": executeCommand(new HelpCommand(this)); break; case "exit": case "quit": running = false; view.showGoodbye(); break; default: view.showError("未知命令: " + input + ",输入 help 查看帮助"); } } } private void executeCommand(Command command) { command.execute(); } private void crawlAll() { view.showMessage("\n开始爬取所有网站...\n"); for (CrawlStrategy strategy : strategies) { executeCommand(new CrawlCommand(strategy, this)); } view.showMessage("\n全部爬取完成!共 " + articles.size() + " 条数据"); } }