|
|
package com.student.model;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* 学生数据仓库类,负责学生数据的存储、检索、更新和删除
|
|
|
* 使用单例模式确保系统中只有一个数据仓库实例
|
|
|
*/
|
|
|
public class StudentRepository {
|
|
|
// 使用Map存储学生数据,以ID为键
|
|
|
private final Map<String, Student> students;
|
|
|
// 单例实例
|
|
|
private static volatile StudentRepository instance;
|
|
|
|
|
|
/**
|
|
|
* 私有构造函数,防止外部实例化
|
|
|
*/
|
|
|
private StudentRepository() {
|
|
|
students = new HashMap<>();
|
|
|
// 初始化一些示例数据
|
|
|
addSampleData();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取单例实例
|
|
|
* @return StudentRepository实例
|
|
|
*/
|
|
|
public static StudentRepository getInstance() {
|
|
|
if (instance == null) {
|
|
|
synchronized (StudentRepository.class) {
|
|
|
if (instance == null) {
|
|
|
instance = new StudentRepository();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return instance;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加示例数据
|
|
|
*/
|
|
|
private void addSampleData() {
|
|
|
addStudent(new Student("1", "张三", 20, "计算机科学"));
|
|
|
addStudent(new Student("2", "李四", 21, "软件工程"));
|
|
|
addStudent(new Student("3", "王五", 19, "数据结构"));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加学生
|
|
|
* @param student 学生对象
|
|
|
*/
|
|
|
public void addStudent(Student student) {
|
|
|
students.put(student.getId(), student);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据ID获取学生
|
|
|
* @param id 学生ID
|
|
|
* @return 学生对象,如果不存在则返回null
|
|
|
*/
|
|
|
public Student getStudentById(String id) {
|
|
|
return students.get(id);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取所有学生
|
|
|
* @return 学生列表
|
|
|
*/
|
|
|
public List<Student> getAllStudents() {
|
|
|
return new ArrayList<>(students.values());
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 更新学生信息
|
|
|
* @param student 更新后的学生对象
|
|
|
* @return 是否更新成功
|
|
|
*/
|
|
|
public boolean updateStudent(Student student) {
|
|
|
if (students.containsKey(student.getId())) {
|
|
|
students.put(student.getId(), student);
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除学生
|
|
|
* @param id 学生ID
|
|
|
* @return 是否删除成功
|
|
|
*/
|
|
|
public boolean deleteStudent(String id) {
|
|
|
return students.remove(id) != null;
|
|
|
}
|
|
|
} |