标签: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