说明
官方说明:在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
自己理解:类似发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。只不过这里这里的消息的发送是调用了订阅者的方法
观察者模式具体实现
定义一个抽象被观察者接口
/**
* @auther 高松
* @DATE 2018/12/25 22:32
* springboot_quartz
*/
public interface Observer {
public void update(String message);
}
定义一个抽象观察者接口
/**
* @auther 高松
* @DATE 2018/12/25 22:31
* springboot_quartz
*/
public interface Observerable {
public void addObserver(Observer observer);
public void removeObserver(Observer observer);
public void notifyObserver(String message);
}
定义实现观察者
/**
* @auther 高松
* @DATE 2018/12/25 22:33
* springboot_quartz
*/
public class ObserverableImpl implements Observerable {
private List<Observer> list= null;
public ObserverableImpl() {
list = new ArrayList<>();
}
@Override
public void addObserver(Observer observer) {
list.add(observer);
}
@Override
public void removeObserver(Observer observer) {
list.remove(observer);
}
@Override
public void notifyObserver(String message) {
for(Observer observer : list){
observer.update(message);
}
}
定义实现被观察者
/**
* @auther 高松
* @DATE 2018/12/25 22:42
* springboot_quartz
*/
public class ObserverImpl implements Observer {
private String name;
@Override
public void update(String message) {
System.out.println(name +"*********"+message);
}
public ObserverImpl(String name){
this.name = name;
}
}
编写一个测试类
/**
* @auther 高松
* @DATE 2018/12/25 22:45
* springboot_quartz
*/
public class test {
public static void main(String[] args) {
Observerable observerable =new ObserverableImpl();
ObserverImpl obser = new ObserverImpl("李四");
observerable.addObserver(obser);
observerable.addObserver(new ObserverImpl("王五"));
observerable.notifyObserver("java 最棒");
observerable.removeObserver(obser);
System.out.println("李四取关");
observerable.notifyObserver("java 还是最棒");
}