观察者模式(简单的实现)

来源:互联网 发布:iphone用usb共享网络 编辑:程序博客网 时间:2024/05/17 16:16

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

原创粉丝点击