You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
1 week ago | |
|---|---|---|
| .. | ||
| analysis | 1 week ago | |
| chart | 1 week ago | |
| model | 1 week ago | |
| spider | 1 week ago | |
| ui | 1 week ago | |
| utils | 1 week ago | |
| MovieMain.java | 1 week ago | |
| README.md | 1 week ago | |
| pom.xml | 1 week ago | |
README.md
电影爬虫项目 - 继承与多态实现说明
项目简介
本项目是一个Java电影爬虫,从豆瓣电影Top250抓取数据,进行清洗、存储、分析,并生成多种图表展示结果。项目重点展示了面向对象编程中继承和多态的实现。
继承与多态实现
1. 接口继承
1.1 核心接口定义
文件: src/main/java/com/crawler/chart/ChartGenerator.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行)
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行)
public void addChartGenerator(ChartGenerator generator) {
chartGenerators.add(generator);
}
2.3 运行时多态(动态绑定)
文件: src/main/java/com/crawler/chart/ChartManager.java (第21-25行)
public void generateAllCharts(List<Movie> 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行)
chartManager.addChartGenerator(ratingChart);
chartManager.addChartGenerator(yearChart);
chartManager.addChartGenerator(genreChart);
chartManager.addChartGenerator(yearRatingChart);
chartManager.generateAllCharts(cleanedMovies);
继承与多态的优势
- 代码复用:所有图表生成器共享相同的接口方法
- 可扩展性:新增图表类型只需实现接口,无需修改现有代码
- 统一管理:
ChartManager可以统一管理不同类型的图表生成器 - 灵活性:通过接口引用可以操作不同的实现类对象
- 可维护性:代码结构清晰,职责分明
项目结构
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 # 年份评分相关性图表
运行说明
- 直接运行:在IDE中直接运行
MovieMain.java - 依赖要求:需要Jsoup和JFreeChart库
- 运行结果:
- 控制台输出爬取进度和图表生成信息
- 生成的CSV数据文件保存在项目目录
- 生成的图表以PNG格式保存在项目目录
技术栈
- Java 8+
- Jsoup (网页解析)
- JFreeChart (图表生成)
- Maven (依赖管理)
总结
本项目通过图表生成器接口及其实现类,充分展示了面向对象编程中继承和多态的核心概念。接口定义了统一的方法规范,实现类提供了具体的实现逻辑,通过接口引用和运行时动态绑定,实现了代码的灵活性和可扩展性。