# 电影爬虫项目 - 继承与多态实现说明 ## 项目简介 本项目是一个Java电影爬虫,从豆瓣电影Top250抓取数据,进行清洗、存储、分析,并生成多种图表展示结果。项目重点展示了面向对象编程中**继承**和**多态**的实现。 ## 继承与多态实现 ### 1. 接口继承 #### 1.1 核心接口定义 **文件**: `src/main/java/com/crawler/chart/ChartGenerator.java` ```java public interface ChartGenerator { void generateChart(Movie[] movies); String getChartName(); } ``` #### 1.2 实现类继承 | 实现类 | 文件位置 | 继承关系 | |-------|---------|----------| | `RatingDistributionChartGenerator` | `src/main/java/com/crawler/chart/impl/RatingDistributionChartGenerator.java` | 实现 `ChartGenerator` 接口 | | `YearDistributionChartGenerator` | `src/main/java/com/crawler/chart/impl/YearDistributionChartGenerator.java` | 实现 `ChartGenerator` 接口 | | `GenreDistributionChartGenerator` | `src/main/java/com/crawler/chart/impl/GenreDistributionChartGenerator.java` | 实现 `ChartGenerator` 接口 | | `YearRatingChartGenerator` | `src/main/java/com/crawler/chart/impl/YearRatingChartGenerator.java` | 实现 `ChartGenerator` 接口 | ### 2. 多态实现 #### 2.1 向上转型(接口引用指向实现类) **文件**: `src/main/java/com/crawler/MovieMain.java` (第41-44行) ```java ChartGenerator ratingChart = new RatingDistributionChartGenerator(); ChartGenerator yearChart = new YearDistributionChartGenerator(); ChartGenerator genreChart = new GenreDistributionChartGenerator(); ChartGenerator yearRatingChart = new YearRatingChartGenerator(); ``` #### 2.2 方法参数多态 **文件**: `src/main/java/com/crawler/chart/ChartManager.java` (第12-13行) ```java public void addChartGenerator(ChartGenerator generator) { chartGenerators.add(generator); } ``` #### 2.3 运行时多态(动态绑定) **文件**: `src/main/java/com/crawler/chart/ChartManager.java` (第21-25行) ```java public void generateAllCharts(List movies) { Movie[] movieArray = movies.toArray(new Movie[0]); for (ChartGenerator generator : chartGenerators) { System.out.println("生成图表: " + generator.getChartName()); generator.generateChart(movieArray); // 运行时根据实际类型调用对应方法 } } ``` #### 2.4 统一调用接口 **文件**: `src/main/java/com/crawler/MovieMain.java` (第46-51行) ```java chartManager.addChartGenerator(ratingChart); chartManager.addChartGenerator(yearChart); chartManager.addChartGenerator(genreChart); chartManager.addChartGenerator(yearRatingChart); chartManager.generateAllCharts(cleanedMovies); ``` ## 继承与多态的优势 1. **代码复用**:所有图表生成器共享相同的接口方法 2. **可扩展性**:新增图表类型只需实现接口,无需修改现有代码 3. **统一管理**:`ChartManager` 可以统一管理不同类型的图表生成器 4. **灵活性**:通过接口引用可以操作不同的实现类对象 5. **可维护性**:代码结构清晰,职责分明 ## 项目结构 ``` src/ └── main/ └── java/ └── com/ └── crawler/ ├── MovieMain.java # 主入口文件 ├── model/ │ └── Movie.java # 电影数据模型 ├── spider/ │ └── DoubanSpider.java # 豆瓣爬虫实现 ├── analysis/ │ └── MovieAnalyzer.java # 数据分析工具 ├── ui/ │ └── MovieResultDisplay.java # 结果显示和图表生成 ├── utils/ │ └── DataUtils.java # 数据工具类 └── chart/ ├── ChartGenerator.java # 图表生成器接口 ├── ChartManager.java # 图表管理器 └── impl/ ├── RatingDistributionChartGenerator.java # 评分分布图表 ├── YearDistributionChartGenerator.java # 年份分布图表 ├── GenreDistributionChartGenerator.java # 类型分布图表 └── YearRatingChartGenerator.java # 年份评分相关性图表 ``` ## 运行说明 1. **直接运行**:在IDE中直接运行 `MovieMain.java` 2. **依赖要求**:需要Jsoup和JFreeChart库 3. **运行结果**: - 控制台输出爬取进度和图表生成信息 - 生成的CSV数据文件保存在项目目录 - 生成的图表以PNG格式保存在项目目录 ## 技术栈 - Java 8+ - Jsoup (网页解析) - JFreeChart (图表生成) - Maven (依赖管理) ## 总结 本项目通过图表生成器接口及其实现类,充分展示了面向对象编程中**继承**和**多态**的核心概念。接口定义了统一的方法规范,实现类提供了具体的实现逻辑,通过接口引用和运行时动态绑定,实现了代码的灵活性和可扩展性。