抽象层 被观察者
package com.xiangxue.rxjavademo.observer_model;
public interface Observable {
// 关注
void addObserver(Observer observer);
// 取消关注
void removeObserver(Observer observer);
// 被观察者发出了改变
void notifyObservers();
// 微信公众号的服务 编辑部门 发布一条消息
void pushMessage(String message);
}
被观察者 实现
package com.xiangxue.rxjavademo.observer_model;
import java.util.ArrayList;
import java.util.List;
public class WechatServerObservable implements Observable {
// 容器 存储 多个 观察者
private List<Observer> observers = new ArrayList<>();
private String message;
@Override
public void addObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
// 遍历容器
for (Observer observer : observers) {
observer.update(message);
}
}
@Override
public void pushMessage(String message) {
this.message = message;
// System.out.println("微信服务号更新了消息:" + message);
// 通知所有 关注了 此服务号的 用户
notifyObservers();
}
}
抽象层 观察者
package com.xiangxue.rxjavademo.observer_model;
public interface Observer {
// 被观察者改变了,我这里可以知道
void update(Object value);
}
观察者 实现
package com.xiangxue.rxjavademo.observer_model;
// 观察者 实现
public class UserPerson implements Observer {
private String name;
private String message;
public UserPerson(String name) {
this.name = name;
}
@Override
public void update(Object value) {
this.message = (String) value;
// 读取消息
readMessage();
}
private void readMessage() {
System.out.println(name + " 收到了推送消息:" + message);
}
}
/**
- TODO 主要是标准观察者模式
- todo# 使用场景例子
有一个微信公众号服务,不定时发布一些消息,关注公众号就可以收到推送消息,取消关注就收不到推送消息。
*/
package com.xiangxue.rxjavademo.observer_model;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
test();
}
public static void test() {
// 编辑部 编辑好的文案内容
String msg = "重大消息:以后Android程序员必须要学习Kotlin,必须要学习各种新技术与跨平台的内容啦";
// 创建一个微信公众号服务(被观察者)
Observable server = new WechatServerObservable();
// 创建 用户 (观察者) 多个
Observer shizhenxiangUser = new UserPerson("史帧湘");
Observer duzitenUser = new UserPerson("杜子腾");
Observer daiyuejinUser = new UserPerson("戴悦京");
Observer liumangUser = new UserPerson("刘芒");
// 订阅 注意:这里的订阅还是 被观察者.订阅(观察者) 关注
server.addObserver(shizhenxiangUser);
server.addObserver(duzitenUser);
server.addObserver(daiyuejinUser);
server.addObserver(liumangUser);
// 微信平台 发生了 改变
// server.pushMessage(msg);
// 肚子疼 取消了关注
System.out.println("============================================");
server.removeObserver(duzitenUser);
// 再次微信平台 发生了 改变
server.pushMessage(msg);
}
}
网友评论