Observable
jdk1.1版本中最早的监听者模式的实现
被监听者要继承Observable类

Observer
jdk1.1版本中最早监听者模式的实现
监听者要实现Observer接口

实例
被监听者
package com.example.demo2;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.Observable;
@Data
@Slf4j
public class Student extends Observable{
private String name;
public Student(String name) {
this.name = name;
}
public void littleAction(){
String s = name + "开始做小动作!";
log.info("\n\n\n" + s);
this.setChanged();
this.notifyObservers(s);
}
public void learning(){
String s = name + "开始学习!";
log.info("\n\n\n" + s);
this.setChanged();
this.notifyObservers(s);
}
}
监听者
package com.example.demo2;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.Observable;
import java.util.Observer;
@Data
@Slf4j
public class Teacher implements Observer {
private String name;
public Teacher(String name) {
this.name = name;
}
@Override
public void update(Observable o, Object arg) {
log.info(name + "发现学生:" + arg);
}
}
启动类
package com.example.demo2;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.Observable;
import java.util.Observer;
@Slf4j
@SpringBootApplication
public class Demo2Application {
public static void main(String[] args) throws InterruptedException {
Teacher z3 = new Teacher("张三老师");
Teacher l4 = new Teacher("李四老师");
Student xm = new Student("小明同学");
xm.addObserver(z3);
xm.addObserver(l4);
xm.addObserver((o, a) -> {
log.info("王五老师发现学生:" + a + "\n学生对象名为:" + o.getClass().getName() + "\n");
});
xm.littleAction();
Thread.sleep(1000L);
xm.learning();
}
}
运行结果
