观察者模式就是在对象之间定义了一对多的依赖,这样一来,当一个这个对象改变状态,依赖它的对象会收到通知并发生改变并自动更新
其实也就是发布-订阅模式,发布者发布消息,订阅者获取消息,没订阅就不会收到消息
这里我们模仿一下微信公众号的推送消息
//观察者接口
public interface Observerable {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObserver();
}
//被观察者接口
public interface Observer {
void update(String message);
}
//模仿微信公众号
import java.util.ArrayList;
import java.util.List;
public class WechatServer implements Observerable{
private List<Observer> list;
private String message;
public WechatServer() {
list=new ArrayList<Observer>();
}
//用户订阅微信公众号
@Override
public void registerObserver(Observer observer) {
list.add(observer);
}
//用户取消关注
@Override
public void removeObserver(Observer observer) {
if (!list.isEmpty()){
list.remove(observer);
}
}
//给全体订阅者发送消息,通过遍历
@Override
public void notifyObserver() {
for (int i=0;i<list.size();i++){
Observer observer=list.get(i);
observer.update(message);
}
}
//选择发布什么消息
public void setInformation(String s){
this.message=s;
System.out.println("微信更新消息:"+s);
notifyObserver();
}
}
//用户
public class User implements Observer{
private String name;
public User(String name) {
this.name = name;
}
public void read(String message){
System.out.println(name+"收到微信推送的消息为:"+message);
}
@Override
public void update(String message) {
read(message);
}
}
接下来测试一下
public class Test {
public static void main(String[] args) {
WechatServer wechatServer=new WechatServer();
Observer one=new User("刘一");
Observer two=new User("王二");
Observer three=new User("张三");
wechatServer.registerObserver(one);
wechatServer.registerObserver(two);
wechatServer.registerObserver(three);
wechatServer.setInformation("今天放假");
System.out.println("==============此时李三取消了微信关注");
wechatServer.removeObserver(three);
wechatServer.setInformation("搞错了,不放假,快回来");
wechatServer.setInformation("通知,李三无故缺席,已被开除,望其他同事引以为戒");
}
}

浙公网安备 33010602011771号