标签:string 获取 image sys 订阅 i++ 发布者 empty override
观察者模式就是在对象之间定义了一对多的依赖,这样一来,当一个这个对象改变状态,依赖它的对象会收到通知并发生改变并自动更新
其实也就是发布-订阅模式,发布者发布消息,订阅者获取消息,没订阅就不会收到消息
这里我们模仿一下微信公众号的推送消息
//观察者接口  
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("通知,李三无故缺席,已被开除,望其他同事引以为戒");
    }
}

标签:string 获取 image sys 订阅 i++ 发布者 empty override
原文地址:https://www.cnblogs.com/xiaobo520/p/10534677.html