目录
1、抽象主题
public interface Subject {
/**
* @desc 注册观察者
* @date 2021年3月21日
* @param ob
* @return void
* @auther Bruce
* @version 1.0
*/
public void registObserver(ObServer ob);
/**
* @desc 取消观察者
* @date 2021年3月21日
* @param ob
* @return void
* @auther Bruce
* @version 1.0
*/
public void remove(ObServer ob);
/**
* @desc 通知观察者
* @date 2021年3月21日
* @param ob
* @return void
* @auther Bruce
* @version 1.0
*/
public void notifyObServer();
}
2、具体主题
import java.util.ArrayList;
import java.util.List;
public class TeacherSubject implements Subject {
private String msg;
private List<ObServer> sers = new ArrayList<>();
@Override
public void registObserver(ObServer ob) {
sers.add(ob);
}
@Override
public void remove(ObServer ob) {
if (sers.indexOf(ob) > 0) {
sers.remove(ob);
}
}
@Override
public void notifyObServer() {
for (ObServer obServer : sers) {
obServer.diffuse(msg);
}
}
public void setMsg(String msg) {
this.msg = msg;
// 通知观察者
notifyObServer();
}
}
3、抽象观察者
/**
* @desc 观察者
* @date 2021年3月21日
* @auther Bruce
* @version 1.0
*/
public interface ObServer {
/**
* 广播信息
*/
public void diffuse(String msg);
}
4、具体观察者
观察者1
public class StudentOneObserver implements ObServer {
private String name;
private Subject subject;
@Override
public void diffuse(String msg) {
System.out.println("张三收到的消息: " + msg);
}
public StudentOneObserver(String name, Subject subject) {
this.name = name;
this.subject = subject;
subject.registObserver(this);
}
}
观察者2
public class StudentTwoObserver implements ObServer {
private String name;
private Subject subject;
@Override
public void diffuse(String msg) {
System.out.println("李四收到的消息: " + msg);
}
public StudentTwoObserver(String name, Subject subject) {
this.name = name;
this.subject = subject;
subject.registObserver(this);
}
}
5、测试类
public class ObserverTest {
public static void main(String[] args) {
// 创建一个主题
TeacherSubject sub = new TeacherSubject();
sub.setMsg("上课了");
// 创建两学生
new StudentOneObserver("张三", sub);
new StudentTwoObserver("张三", sub);
// 通知所有学生上课
sub.setMsg("上课了");
}
}
6、运行结果
张三收到的消息: 上课了
李四收到的消息: 上课了