Rxjava 的学习和使用

一:添加依赖
二:被观察者接口
三:被观察者的实现
四:观察接口
五:观察者的实现
六:被观察者和观察者的绑定

一:添加依赖

// 依赖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);
}

}

六:被观察者与观察者的绑定

/**

  • TODO 标准观察者模式
  • todo# 使用场景例子
  •  有一个微信公众号服务,不定时发布一些消息,
    
  •  关注公众号就可以收到推送消息,取消关注就收不到推送消息。
    

*/

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 收到了被观察者推送消息:重大消息:周五就应该有周五的态度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值