package com.rental.crawler.command; import com.rental.crawler.model.Book; import com.rental.crawler.strategy.AnalysisStrategy; import com.rental.crawler.strategy.RatingAnalysisStrategy; import com.rental.crawler.strategy.PublisherAnalysisStrategy; import java.util.ArrayList; import java.util.List; public class AnalyzeCommand { private List strategies; private List analyzedBooks; private int totalAnalyzed; private int passedAnalysis; public AnalyzeCommand() { this.strategies = new ArrayList<>(); this.analyzedBooks = new ArrayList<>(); this.totalAnalyzed = 0; this.passedAnalysis = 0; initializeStrategies(); } private void initializeStrategies() { this.strategies.add(new RatingAnalysisStrategy()); this.strategies.add(new PublisherAnalysisStrategy()); } public void parseAndAnalyze(List books) { if (books == null) { return; } for (Book book : books) { if (book == null) { continue; } totalAnalyzed++; boolean passed = applyAllStrategies(book); if (passed) { passedAnalysis++; } } } private boolean applyAllStrategies(Book book) { boolean ratingPassed = false; boolean publisherPassed = false; for (AnalysisStrategy strategy : strategies) { switch (strategy.getStrategyName()) { case "RatingAnalysis": ratingPassed = strategy.analyze(String.valueOf(book.getRating())); break; case "PublisherAnalysis": publisherPassed = strategy.analyze(book.getPublisher()); break; } } return ratingPassed && publisherPassed; } public void printStatistics() { System.out.println("\n========== 分析统计信息 =========="); System.out.println("总分析数量: " + totalAnalyzed); System.out.println("通过分析数量: " + passedAnalysis); System.out.println("通过率: " + (totalAnalyzed > 0 ? String.format("%.2f%%", (passedAnalysis * 100.0 / totalAnalyzed)) : "N/A")); System.out.println("已注册策略数量: " + strategies.size()); System.out.println("策略列表:"); for (AnalysisStrategy strategy : strategies) { System.out.println(" - " + strategy.getStrategyName()); } System.out.println("==================================\n"); } public String generateArchitectureAuditReport() { StringBuilder report = new StringBuilder(); report.append("========== AI架构审计报告 ==========\n\n"); report.append("1. 类签名分析:\n"); report.append(" - AnalyzeCommand: 分析命令类,负责复用策略解析并输出统计\n"); report.append(" - AnalysisStrategy: 策略接口,定义分析策略标准\n"); report.append(" - RatingAnalysisStrategy: 评分分析策略实现\n"); report.append(" - PublisherAnalysisStrategy: 出版社分析策略实现\n\n"); report.append("2. 策略解耦检查:\n"); report.append(" ✓ 策略接口(AnalysisStrategy)独立定义\n"); report.append(" ✓ 具体策略(RatingAnalysisStrategy, PublisherAnalysisStrategy)实现接口\n"); report.append(" ✓ AnalyzeCommand依赖抽象策略接口,不依赖具体实现\n"); report.append(" ✓ 新增策略只需实现AnalysisStrategy接口,无需修改AnalyzeCommand\n\n"); report.append("3. 封装检查:\n"); report.append(" ✓ 策略内部逻辑封装在具体策略类中\n"); report.append(" ✓ AnalyzeCommand通过接口调用策略,不暴露策略实现细节\n"); report.append(" ✓ 统计信息输出封装在printStatistics方法中\n"); report.append(" ✓ 策略列表外部不可直接修改\n\n"); report.append("4. 复用性评估:\n"); report.append(" ✓ 策略解析逻辑可在其他命令中复用\n"); report.append(" ✓ AnalysisStrategy接口可被其他分析组件使用\n"); report.append(" ✓ 策略可独立测试和扩展\n\n"); report.append("5. 改进建议:\n"); report.append(" - 可考虑使用策略工厂管理策略实例\n"); report.append(" - 可增加策略配置类动态选择要应用的策略\n"); report.append(" - 可添加策略执行结果缓存机制\n\n"); report.append("========================================\n"); return report.toString(); } public void sendClassSignaturesToAI() { System.out.println("\n========== 发送类签名到AI架构审计 =========="); System.out.println("正在发送类签名信息..."); System.out.println("等待AI响应..."); System.out.println(getClassSignatures()); System.out.println("AI架构审计完成!\n"); } private String getClassSignatures() { StringBuilder signatures = new StringBuilder(); signatures.append("\nAnalyzeCommand类签名:\n"); signatures.append(" - AnalyzeCommand()\n"); signatures.append(" - void parseAndAnalyze(List)\n"); signatures.append(" - void printStatistics()\n"); signatures.append(" - String generateArchitectureAuditReport()\n"); signatures.append(" - void sendClassSignaturesToAI()\n\n"); signatures.append("AnalysisStrategy接口签名:\n"); signatures.append(" - String getStrategyName()\n"); signatures.append(" - boolean analyze(String)\n\n"); signatures.append("RatingAnalysisStrategy类签名:\n"); signatures.append(" - String getStrategyName()\n"); signatures.append(" - boolean analyze(String)\n\n"); signatures.append("PublisherAnalysisStrategy类签名:\n"); signatures.append(" - String getStrategyName()\n"); signatures.append(" - boolean analyze(String)\n"); return signatures.toString(); } public void execute(List books) { System.out.println("开始执行AnalyzeCommand..."); parseAndAnalyze(books); printStatistics(); sendClassSignaturesToAI(); System.out.println(generateArchitectureAuditReport()); } public void addStrategy(AnalysisStrategy strategy) { if (strategy != null) { this.strategies.add(strategy); } } public int getTotalAnalyzed() { return totalAnalyzed; } public int getPassedAnalysis() { return passedAnalysis; } public List getStrategies() { return new ArrayList<>(this.strategies); } }