用观察者模式编写学生管理系统
时间: 2023-07-18 09:33:22 浏览: 44
好的,我来回答您的问题。观察者模式是一种设计模式,用于在对象之间建立一对多的依赖关系,以便当一个对象状态发生改变时,其所有依赖对象都可以自动收到通知并作出相应的更新。下面是一个用观察者模式编写的学生管理系统的示例:
首先,我们需要定义两个接口:一个是学生类(Subject),另一个是观察者类(Observer)。
```java
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
public interface Observer {
void update(String message);
}
```
然后,我们实现具体的学生类(Student)和观察者类(Teacher)。
```java
public class Student implements Subject {
private String name;
private List<Observer> observers;
private String message;
public Student(String name) {
this.name = name;
this.observers = new ArrayList<>();
}
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(message);
}
}
public void sendMessage(String message) {
this.message = message;
notifyObservers();
}
public String getName() {
return name;
}
}
public class Teacher implements Observer {
private String name;
public Teacher(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " received message: " + message);
}
}
```
在这个例子中,我们假设学生(Student)可以发送消息给教师(Teacher),当学生发送消息时,所有订阅该学生的教师都可以收到通知并作出相应的更新。
现在,我们可以编写一个测试类来测试我们的学生管理系统。
```java
public class Test {
public static void main(String[] args) {
Student student = new Student("Tom");
Teacher teacher1 = new Teacher("Jack");
Teacher teacher2 = new Teacher("Lucy");
student.registerObserver(teacher1);
student.registerObserver(teacher2);
student.sendMessage("I'm Tom, I have a question.");
student.removeObserver(teacher2);
student.sendMessage("I'm Tom, thank you for your help.");
student.registerObserver(teacher2);
student.sendMessage("I'm Tom, I have another question.");
}
}
```
输出结果:
```
Jack received message: I'm Tom, I have a question.
Lucy received message: I'm Tom, I have a question.
Jack received message: I'm Tom, thank you for your help.
Lucy received message: I'm Tom, I have another question.
```
在这个例子中,我们创建了一个名为 Tom 的学生,并让 Jack 和 Lucy 两位教师订阅该学生。当 Tom 发送消息时,Jack 和 Lucy 都会收到通知。然后,我们从学生的订阅列表中删除了 Lucy,当 Tom 发送第二条消息时,只有 Jack 收到了通知。最后,我们重新将 Lucy 添加到了订阅列表中,并再次发送了一条消息,这次 Jack 和 Lucy 都收到了通知。