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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值