一:添加依赖 二:被观察者接口 三:被观察者的实现 四:观察接口 五:观察者的实现 六:被观察者和观察者的绑定
一:添加依赖
// 依赖RxAndroid 2X 的依赖库
// 增加RxJava 2X 的依赖库
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'io.reactivex.rxjava2:rxjava:2.0.7'
二: 被观察者接口
// 抽象层 被观察者 public interface Observable {
// 关注
void addObserver(Observer observer);
// 取消关注
void removeObserver(Observer observer);
// 被观察者发出了改变
void notifyAllObservers();
// 微信公众号的服务 编辑部门 发布一条消息
void pushMessage(String message);
}
三:被观察者的实现
// 被观察者的具体实现 public class WechatServerObservable implements Observable { private static final String TAG = “lcj WechatServerObservable”;
// 容器 存储 多个 观察者,被观察者身上到底有多少个观察者,用一个集合存储起来
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 notifyAllObservers() {
// 遍历容器(容器里都是观察者),通知所有的观察者,去接收被观察者发出的消息
for (Observer observer : observers) {
observer.receive(message);
}
}
@Override
public void pushMessage(String message) {
this.message = message;
Log.i(TAG, "pushMessage 被观察者发送了消息,消息内容是:" + message);
// 通知所有 关注了 此服务号的 用户
notifyAllObservers();
}
}
四:观察者
//抽象层 观察者 public interface Observer { // 被观察者改变了/发送消息了,观察者这里可以知道 void receive(Object value); }
五:观察者的实现
// 观察者 实现
public class UserPerson implements Observer { private static final String TAG = “lcj UserPerson”;
private String name; // 订阅者的名字
private String message; // 订阅者收到的消息
public UserPerson(String name) {
this.name = name;
}
@Override
public void receive(Object value) {
this.message = (String) value;
Log.i(TAG, "receive name:" + name + " 收到了被观察者推送消息:" + message);
}
}
六:被观察者与观察者的绑定
/**
*/
public class MainActivity extends AppCompatActivity { private static final String TAG = “lcj MainActivity”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
test();
}
public static void test() {
// 公众号 编辑好的文案内容
String msg = "重大消息:周五就应该有周五的态度";
// 创建一个微信公众号服务即创建被观察者
Observable server = new WechatServerObservable();
// 创建 用户 (观察者) 多个
Observer observer1 = new UserPerson("订阅者1");
Observer observer2 = new UserPerson("订阅者2");
Observer observer3 = new UserPerson("订阅者3");
Observer observer4 = new UserPerson("订阅者4");
// 订阅 /绑定 , 被观察者.订阅(观察者) 即server.addObsrver(observer)
server.addObserver(observer1);
server.addObserver(observer2);
server.addObserver(observer3);
server.addObserver(observer4);
// 微信平台 发生了 改变
// server.pushMessage(msg);
// observer3 取消了关注
Log.i(TAG, "===========observer3 取消了观察/订阅===================");
server.removeObserver(observer3);
// 再次微信平台 发生了 改变
server.pushMessage(msg);
}
}
最后打印的效果: I/lcj MainActivity: ====observer3 取消了观察/订阅= I/lcj WechatServerObservable: pushMessage 被观察者发送了消息,消息内容是:重大消息:周五就应该有周五的态度 I/lcj UserPerson: receive name:订阅者1 收到了被观察者推送消息:重大消息:周五就应该有周五的态度 I/lcj UserPerson: receive name:订阅者2 收到了被观察者推送消息:重大消息:周五就应该有周五的态度 I/lcj UserPerson: receive name:订阅者4 收到了被观察者推送消息:重大消息:周五就应该有周五的态度
|