模拟实现考试试题处理逻辑,试题方式,01:手动选题;02:顺序抽题;03:随机抽题
1.创建一个策略接口
public interface ITestQuestions {
/**
* 获取试题
*
* @param paperId 试卷管理表Id
* @return 试题数据
*/
List<TestQuestionsVO> listTestQuestions(Long paperId);
}
2.创建一个工厂类
public class TestQuestionsFactory {
private static final Map<String, ITestQuestions> MAP = new ConcurrentHashMap<>();
public static ITestQuestions getKey(String type) {
return MAP.get(type);
}
public static void register(String type, ITestQuestions iTestQuestions) {
MAP.put(type, iTestQuestions);
}
}
3.创建一个手动选题实现类
@Component
public class ManualImpl implements ITestQuestions, InitializingBean {
/**
* 01:手动选题
*
* @param paperId 试卷管理表Id
* @return 试题数据
*/
@Override
public List<TestQuestionsVO> listTestQuestions(Long paperId) {
return null;
}
@Override
public void afterPropertiesSet() {
TestQuestionsFactory.register("01", this);
}
}
4.创建一个顺序抽题实现类
@Component
public class OrderImpl implements ITestQuestions, InitializingBean {
/**
* 02:顺序抽题
*
* @param paperId 试卷管理表Id
* @return 试题数据
*/
@Override
public List<TestQuestionsVO> listTestQuestions(Long paperId) {
return null;
}
@Override
public void afterPropertiesSet() {
TestQuestionsFactory.register("02", this);
}
}
5.创建一个随机抽题实现类
@Component
public class RandomImpl implements ITestQuestions, InitializingBean {
/**
* 03:随机抽题
*
* @param paperId 试卷管理表Id
* @return 试题数据
*/
@Override
public List<TestQuestionsVO> listTestQuestions(Long paperId) {
return null;
}
@Override
public void afterPropertiesSet() {
TestQuestionsFactory.register("03", this);
}
}
6.创建一个调用类
@RestController
public class MyController {
@GetMapping("/listTestQuestions")
public List<TestQuestionsVO> listTestQuestions(String type, Long paperId) {
//工厂中获取策略
ITestQuestions iTestQuestions = TestQuestionsFactory.getKey(type);
//执行策略
return iTestQuestions.listTestQuestions(paperId);
}
}