软件设计                  石家庄铁道大学信息学院

 

实验7:单例模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解单例模式的动机,掌握该模式的结构;

2、能够利用单列模式解决实际问题

 

[实验任务一]:学号的单一

仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。

实验要求:

1. 画出对应的类图;

 

 

 

 

 

 

2. 提交源代码;

import java.util.ArrayList;
import java.util.List;

class Student {
    private int id;
    private String name;

    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class StudentManager {
    private List<Student> students;

    public StudentManager() {
        students = new ArrayList<>();
    }

    public void addStudent(Student student) {
        for (Student s : students) {
            if (s.getId() == student.getId()) {
                throw new IllegalArgumentException("学号已存在");
            }
        }
        students.add(student);
    }

    public Student getStudentById(int id) {
        for (Student student : students) {
            if (student.getId() == id) {
                return student;
            }
        }
        return null;
    }
}

public class Main {
    public static void main(String[] args) {
        StudentManager manager = new StudentManager();
        Student student1 = new Student(1, "张三");
        Student student2 = new Student(2, "李四");
        Student student3 = new Student(1, "王五"); // 尝试添加重复学号的学生,应抛出异常

        manager.addStudent(student1);
        manager.addStudent(student2);

        try {
            manager.addStudent(student3);
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
        }

        Student foundStudent = manager.getStudentById(1);
        if (foundStudent!= null) {
            System.out.println("找到学生:" + foundStudent.getName());
        }
    }
}

 

3.注意编程规范。