1.简介
简单的来说就是一对多模式(即消息发布订阅模式),一发生改变,多能够收到改变的消息。典型的应用就是消息队列Kafka, MQ等。
2.举个简单的小栗子
公众号平台和订阅该公众号的微信号,就是典型的观察者模式。公众号有消息推送,各个关注微信号的人都能收到消息,下面是模式代码。
3.代码实现
3.1 Subject.java可以理解为抽象公众号主题
public interface Subject {
void attach(Observer observer);
void detach(Observer observer);
void notifyMsg();
}
3.2 Platform.java公众号平台
public class Platform implements Subject {
private List<Observer> observers = null;
public Platform() {
this.observers = new ArrayList<>();
}
@Override
public void attach(Observer observer) {
observers.add(observer);
}
@Override
public void detach(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyMsg() {
observers.forEach(observer -> {
observer.update("push msg.");
});
}
}
3.3 Observer.java观察者抽象接口
public interface Observer {
void update(String msg);
}
3.4 WeiXinUser.java具体
public class WeiXinUser implements Observer {
private String name;
public WeiXinUser(String name) {
this.name = name;
}
@Override
public void update(String msg) {
System.out.println("name:" + name + " MSG:" + msg);
}
}
4.测试
public class ObserverPatternDemo {
public static void main(String[] args) {
Platform platform = new Platform();
Observer tom = new WeiXinUser("tom");
WeiXinUser jack = new WeiXinUser("jack");
platform.attach(tom);
platform.attach(jack);
platform.notifyMsg();
platform.detach(jack);
platform.notifyMsg();
}
}
result:
name:tom MSG:push msg.
name:jack MSG:push msg.
name:tom MSG:push msg.
tom和jack开始都关注了公众号,所以都能接收到消息推送。后来jack取消了,那么只有tom能接收到推送了。