ITeacher.java
package myObserver;
import java.util.Vector;
public class ITeacher {
protected boolean status = false;
public Vector<IStudent> students = new Vector<IStudent>();
public synchronized IStudent addObserver(IStudent student) {
students.add(student);
return student;
}
public synchronized IStudent deleteObserver(IStudent student) {
students.remove(student);
return student;
}
public synchronized void notifyObservers() {
this.notifyObservers("");
}
public synchronized void notifyObservers(String str) {
if (status) {
for (IStudent student : students) {
student.update(this, str);
}
status = false;
} else {
}
}
public synchronized void setChanged() {
status = true;
}
}
Teacher.java
package myObserver;
public class Teacher extends ITeacher {
private String name;
public void endClass() {
notifyObservers(name);
}
public Teacher(String name) {
super();
this.name = name;
}
}
IStudent.java
package myObserver;
public interface IStudent {
public void update(ITeacher teacher, Object object);
}
Student1.java
package myObserver;
public class Student1 implements IStudent {
@Override
public void update(ITeacher teacher, Object object) {
if (object instanceof String) {
System.out.println(object + " say class is over! "
+ this.getClass().getName());
}
}
}
Student2.java
package myObserver;
public class Student2 implements IStudent {
@Override
public void update(ITeacher teacher, Object object) {
if (object instanceof String) {
System.out.println(object + " say class is over! "
+ this.getClass().getName());
}
}
}
Test.java
package myObserver;
public class Test {
public static void main(String[] args) {
Teacher teacher = new Teacher("Teacher Li");
teacher.addObserver(new Student1());
teacher.addObserver(new Student2());
teacher.setChanged();
teacher.endClass();
}
}
Result:
Teacher Li say class is over! myObserver.Student1
Teacher Li say class is over! myObserver.Student2