教师布置作业给学生和家长-Java
题目:教师,学生,家长。教师布置作业给学生和家长。每当教师布置一个道题时,就要自动通知到所有的学生和家长把该题记下来,然后在布置下一道题。要求程序扩展性,新学生或者家长可以随时加入这个班级,可以随时转学取消作业通知。(提示:模拟天气预报的案例,使用观察者模型)
具体代码如下:
Observer.java
public interface Observer {
public void update(String info);
}
Subject.java
public interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}
Parent.java
public class Parent implements Observer {
private TeacherSubject t;
//学生的姓名,用来标识不同的学生对象
private String name;
//构造器用来注册观察者
public Parent(String name,TeacherSubject t) {
this.name=name;
this.t = t;
//每新建一个学生对象,默认添加到观察者的行列
t.registerObserver(this);;
}
public void update(String info) {
System.out.println("家长"+name+"得到作业:"+info);
}
}
StudentObserver.java
public class StudentObserver implements Observer {
private TeacherSubject t;
//学生的姓名,用来标识不同的学生对象
private String name;
//构造器用来注册观察者
public StudentObserver(String name,TeacherSubject t) {
this.name=name;
this.t = t;
//每新建一个学生对象,默认添加到观察者的行列
t.registerObserver(this);;
}
public void update(String info) {
System.out.println("学生"+name+"得到作业:"+info);
}
}
TeacherSubject.java
import java.util.ArrayList;
import java.util.List;
public class TeacherSubject implements Subject {
//用来存放和记录观察者
private List<Observer> observers=new ArrayList<Observer>();
//记录状态的字符串
private String info;
public void notifyObservers() {
for (int i = 0; i < observers.size(); i++) {
Observer observer = (Observer)observers.get(i);
observer.update(info);
}
}
public void registerObserver(Observer o) {
observers.add(o);
}
public void removeObserver(Observer o) {
int i = observers.indexOf(o);
if (i >= 0) {
observers.remove(i);
}
}
//布置作业的方法,在方法最后,需要调用notifyObserver()方法,通知所有观察者更新状态
public void setHomework(String info){
this.info=info;
System.out.println("今天的作业是"+info);
this.notifyObservers();
}
}
TestObserver.java
public class TestObserver {
public static void main(String[] args) {
TeacherSubject teacher=new TeacherSubject();
StudentObserver s=new StudentObserver("张三", teacher);
StudentObserver LiSi=new StudentObserver("李四", teacher);
StudentObserver WangWu=new StudentObserver("王五", teacher);
Parent zparent=new Parent("张大三", teacher);
Parent lparent=new Parent("李大四", teacher);
teacher.setHomework("第二页第六题");
teacher.setHomework("第三页第七题");
teacher.setHomework("第五页第八题");
}
}