import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; /** * 分析命令类 * 复用策略解析但不存储,只输出统计信息 */ public class AnalyzeCommand { private final List
articles; private final List analyzers; /** * 构造函数,接收文章列表和分析器列表 * @param articles 要分析的文章列表 * @param analyzers 分析器列表 */ public AnalyzeCommand(List
articles, List analyzers) { Objects.requireNonNull(articles, "文章列表不能为null"); Objects.requireNonNull(analyzers, "分析器列表不能为null"); this.articles = new ArrayList<>(articles); this.analyzers = new ArrayList<>(analyzers); } /** * 执行分析并输出结果(不存储) */ public void execute() { System.out.println("================================================"); System.out.println(" 文章分析报告"); System.out.println("================================================"); System.out.println("分析文章数量: " + articles.size()); System.out.println("分析器数量: " + analyzers.size()); System.out.println("------------------------------------------------"); for (ArticleAnalyzer analyzer : analyzers) { System.out.println("\n【" + analyzer.getName() + "】"); Map result = analyzer.analyze(articles); // 输出分析结果(不存储) for (Map.Entry entry : result.entrySet()) { if (!"analyzer".equals(entry.getKey())) { System.out.println(" " + formatKey(entry.getKey()) + ": " + formatValue(entry.getValue())); } } } System.out.println("\n================================================"); System.out.println(" 分析报告结束"); System.out.println("================================================"); } /** * 格式化键名 */ private String formatKey(String key) { switch (key) { case "totalCount": return "文章总数"; case "averageLength": return "平均标题长度"; case "maxLength": return "最长标题长度"; case "minLength": return "最短标题长度"; default: return key; } } /** * 格式化值 */ private String formatValue(Object value) { if (value instanceof Double) { return String.format("%.2f", value); } return value.toString(); } /** * 添加分析器 */ public void addAnalyzer(ArticleAnalyzer analyzer) { Objects.requireNonNull(analyzer, "分析器不能为null"); analyzers.add(analyzer); } }