Observable
package com.example.testjavademo;public abstract class Observable implements ObServableSource{@Overridepublic void subscribeObserver(ObServer obServer) {//把这个功能留给不同的Observable处理sbuscribleActual(obServer);}//模板方法protected abstract void sbuscribleActual(ObServer observer);//创建具体被观察者public static <T> Observable create(ObServableOnSubscrile<T> subscrile){return new ObServableCreate<T>(subscrile);}
}
ObServer
package com.example.testjavademo;public interface ObServer<T> {//接收消息 undate()void onNext(T t);//调用关联时调用void onSubscribe();//接收异常消息void onError();//接收消息完成void onComplete();
}
ObServableSource
package com.example.testjavademo;
//抽象被观察者
public interface ObServableSource {//订阅功能 绑定ObServable 与ObServer关联public void subscribeObserver(ObServer obServer);
}
ObServableOnSubscrile
package com.example.testjavademo;/*** 绑定发射器  被观察者和发射器分离了* @param <T>*/
public interface ObServableOnSubscrile <T>{void subscribe(Emitter<T> emitter);
}
Emitter
package com.example.testjavademo;/*** 给用户发送消息接口* @param <T>*/
public interface Emitter <T>{//接收消息 undate()void onNext(T t);//接收异常消息void onError();//接收消息完成void onComplete();
}
ObServableCreate
package com.example.testjavademo;/*** 具体被 观察者*/
public class ObServableCreate<T>  extends Observable{ObServableOnSubscrile<T> subscrile;public ObServableCreate ( ObServableOnSubscrile<T> subscrile){this.subscrile=subscrile;}@Overrideprotected void sbuscribleActual(ObServer observer) {observer.onSubscribe();//创建发射器CreateEmitter createEmitter=new CreateEmitter(observer);subscrile.subscribe(createEmitter);}static final class CreateEmitter<T> implements Emitter<T>{final ObServer<T> obServer;CreateEmitter(ObServer<T> obServer) {this.obServer = obServer;}@Overridepublic void onNext(T t) {obServer.onNext(t);}@Overridepublic void onError() {obServer.onError();}@Overridepublic void onComplete() {obServer.onComplete();}}
}
MainActivity
package com.example.testjavademo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.util.Log;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);test();}private void test() {Observable .create(new ObServableOnSubscrile<String>() {@Overridepublic void subscribe(Emitter<String> emitter) {emitter.onNext("大家好");}}).subscribeObserver(new ObServer<String>() {@Overridepublic void onNext(String s) {}@Overridepublic void onSubscribe() {}@Overridepublic void onError() {}@Overridepublic void onComplete() {}});}
}

android 观察者模式相关推荐

  1. android观察者模式例子,Android-Kotlin实现观察者模式的小案例

    在日常的Android开发当中,我们肯定会遇到要使用观察者模式的场景.下面分享一下利用如何用Kotlin实现Android的交互代码. 源码 1.创建两个接口 /** * 类说明:观察者接口 * * ...

  2. android 观察者模式的简单demo,一个简单的demo彻底搞懂观察者模式

    介绍 观察者模式也被称为发布-订阅(Publish/Subscribe)模式,它属于行为型模式的一种.观察者模式定义了一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听.当这个主题对象状态变 ...

  3. android观察者模式容器联动,观察者模式(触发联动)

    0.提纲 目录: 1.举例:发起登录请求 2.Android Adapter 相关源代码分析 3.EventBus 相关源代码分析 4.观察者模式总结 需要查看其它设计模式描述可以查看我的文章< ...

  4. android观察者模式被观察者,Android的设计模式-观察者模式

    前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中: 1.定义 定义对象间的一种一个对多的依赖关系,当一个对象的状态发送改变时,所以依赖于它的对象都得到通知并被自动更新. 2.介绍 观察 ...

  5. Android—用最简单的案例Demo带你分析解读:Android观察者模式

    */ public abstract class Service { /** 增加我要通知者,这里存入的是抽象(抽象包括抽象类或) @param iPhone */ public abstract v ...

  6. android开发笔记-知识点

    1:Android Permission denied(不允许连接Socket) 错误 原因是: 需要访问到网络,所以,在AndroidManifest.xml中,需要进行如下配置:  <use ...

  7. 渐进式web应用程序_渐进式Web应用程序:简介

    如果您从事网站建设业务,那么您可能会越来越多地听到人们谈论渐进式Web应用程序 (PWA). 由Google开发的PWA在吸引用户方面具有网络的所有优势,以及用户可以从本地应用程序获得的速度和可靠性. ...

  8. Android设计模式-观察者模式

    原文地址 http://blog.csdn.net/qq_25806863/article/details/69218968 观察者模式是一种使用频率非常高的设计模式,最常用的地方就是订阅-发布系统. ...

  9. Android设计模式系列(2)--SDK源码之观察者模式

    观察者模式,是一种非常常见的设计模式,在很多系统中随处可见,尤其是涉及到数据状态发生变化需要通知的情况下. 本文以AbstractCursor为例子,展开分析. 观察者模式,Observer Patt ...

最新文章

  1. The Innovation | Volume 2 Issue 2 正式出版
  2. 2018年终总结之AI领域开源框架汇总
  3. 【FFmpeg】FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 | 复用 | 解复用 )
  4. 读写EEPROM遇到的问题:16位地址的内容都是最后写入的数据。
  5. 44)PHP,多个数据库查询(我没试)
  6. python0表示剪刀_石头,纸,剪刀Python代码。帮助简化
  7. 无迹卡尔曼滤波器(UKF)
  8. Oracle作业job 没有自动调度起来
  9. 还在为保研和研究生毕业发愁吗?呐,给你推荐最近的几个保底的会议~
  10. VC++ DLL注入目标程序
  11. linux的视频格式转换软件,工具盘点:必备的Linux视频转换工具(1)
  12. 什么是servlet?有什么作用?
  13. 联想7x04服务器装系统,联想硬盘保护EDU7X的安装方法.doc
  14. 林子雨-2.3 面向对象编程基础
  15. 计算机服务怎么打开flash,快速讲解Win10自带的浏览器如何开启Adobe Flash?
  16. Java对接ChinaPay提现(公私钥方式)
  17. 重启计算机恢复出厂设置,windows7电脑恢复出厂设置的三种方法
  18. iOS 屏幕旋转监听
  19. 一辈子交186万五险一金!退休你能拿回多少?算完惊呆……
  20. SQL Server 导入.mdf和.ldf文件

热门文章

  1. TCP与 UDP的区别
  2. 【Linux】Linux下怎么下载安装Chrome?
  3. 苹果无需越狱了!通过苹果签名轻松安装IPA文件
  4. oracle 11g 更改sid和dbname
  5. BUUCTF-PWN刷题记录25(IO file attack)
  6. 抛出异常及声明异常 自己定义一个异常
  7. 阿里云部署数据库(遇到的问题及解决方案)
  8. 财神来了 | 那些年伤害过你的分叉币
  9. vue-router 采坑记录
  10. mac pdf去水印_PDF水印工具for Mac-PDF水印工具Mac版下载 V1.7-PC6苹果网