用观察者模式编写一个学生管理系统
时间: 2023-07-18 19:33:20 浏览: 37
好的,以下是一个用观察者模式编写的简单学生管理系统:
```Java
import java.util.ArrayList;
import java.util.List;
// 观察者接口
interface Observer {
void update(Student student);
}
// 学生类
class Student {
private String name;
private int age;
private double score;
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "姓名:" + name + ", 年龄:" + age + ", 成绩:" + score;
}
}
// 被观察者(学生管理系统)类
class StudentManager {
private List<Student> students = new ArrayList<>();
private List<Observer> observers = new ArrayList<>();
public void addStudent(Student student) {
students.add(student);
notifyObservers(student);
}
public void removeStudent(Student student) {
students.remove(student);
notifyObservers(student);
}
public void addObserver(Observer observer) {
observers.add(observer);
}
public void removeObserver(Observer observer) {
observers.remove(observer);
}
// 通知所有观察者
private void notifyObservers(Student student) {
for (Observer observer : observers) {
observer.update(student);
}
}
}
// 观察者1(用于打印新增学生的信息)
class AddStudentObserver implements Observer {
@Override
public void update(Student student) {
System.out.println("新增学生:" + student);
}
}
// 观察者2(用于打印删除学生的信息)
class RemoveStudentObserver implements Observer {
@Override
public void update(Student student) {
System.out.println("删除学生:" + student);
}
}
// 测试类
public class Main {
public static void main(String[] args) {
StudentManager studentManager = new StudentManager();
AddStudentObserver addStudentObserver = new AddStudentObserver();
RemoveStudentObserver removeStudentObserver = new RemoveStudentObserver();
studentManager.addObserver(addStudentObserver);
studentManager.addObserver(removeStudentObserver);
studentManager.addStudent(new Student("张三", 18, 90.0));
studentManager.addStudent(new Student("李四", 19, 85.0));
studentManager.removeStudent(new Student("张三", 18, 90.0));
}
}
```
上面的代码中,学生类为被观察者,学生管理系统类为观察者,新增学生观察者和删除学生观察者为具体的观察者。当新增或删除学生时,学生管理系统类会通知所有观察者进行相应的操作。在测试类中,我们添加了两个学生,然后删除了一个学生,程序会输出以下信息:
```
新增学生:姓名:张三, 年龄:18, 成绩:90.0
新增学生:姓名:李四, 年龄:19, 成绩:85.0
删除学生:姓名:张三, 年龄:18, 成绩:90.0
```