package com.mathgenerator.service; import com.mathgenerator.model.User; import com.mathgenerator.model.Level; import com.mathgenerator.service.strategy.PaperStrategy; // 导入策略接口 import com.mathgenerator.storage.FileManager; import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * 它现在依赖一个PaperStrategy来决定题目组合方式。 */ public class PaperService { private final FileManager fileManager; private final PaperStrategy paperStrategy; // 持有策略接口的引用 /** * PaperService的构造函数。 *
* 通过构造函数注入其依赖的文件管理器和试卷组合策略。 * 这种设计遵循了依赖注入(DI)原则,增强了代码的模块化和可测试性。 * * @param fileManager 用于处理文件读写的FileManager实例。 * @param paperStrategy 用于决定题目组合方式的PaperStrategy实例。 */ public PaperService(FileManager fileManager, PaperStrategy paperStrategy) { this.fileManager = fileManager; this.paperStrategy = paperStrategy; } /** * 创建并保存一份完整的试卷。 *
* 这是该服务的核心方法。它 orchestrates 整个流程:
* 1. 加载指定用户的历史题目以进行查重。
* 2. 进入循环,委托给注入的 {@link PaperStrategy} 来动态选择题目生成器。
* 3. 生成新题目并进行查重,直到满足指定的题目数量。
* 4. 调用 {@link FileManager} 将最终的试卷内容保存到文件中。
*
* @param user 当前已登录的用户对象。
* @param count 需要生成的题目数量。
* @param currentLevel 用户当前选择的主难度级别。
*/
public void createAndSavePaper(User user, int count, Level currentLevel) {
Set