Observable观察者模式的使用
今天我们公司封装的类中没有加上Observable观察者模式,但是很多地方需要用到Observable观察者模式
接下来就向大家介绍一下我的使用吧!
在介绍之前我们写了一个方法
public class RefreshSender extends Observable { private static RefreshSender instances; public static RefreshSender getInstances(){
if(instances==null)
instances=new RefreshSender(); return instances;
} /**
* 发送消息
* @param type
*/
public void sendMessage(String type){
setChanged();
this.notifyObservers(type);
} }
这个方法可以注册也可以取消注册,还有一个发消息的方法
首先我使用最基本的直接使用Observable
1.发消息
在发消息的界面调Observable接口
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RefreshSender.getInstances().addObserver(this);
} @Override
protected void onDestroy() {
super.onDestroy();
RefreshSender.getInstances().deleteObserver(this);
}
在对应的进程中注册和取消注册
然后发消息
JSONObject object1 =new JSONObject();
object1.put("type","childrenaction");
object1.put("school",strValue);
RefreshSender.getInstances().sendMessage(object1.toJSONString());
好消息发好了,接下来接收消息了
2接收消息
同样用到Observeable就要注册和取消注册然后调Observeable这个接口
调接口大家就会发现有update这个方法,在这个方法里就可以获取到你传递的数据了
@Override
public void update(Observable observable, Object data) {
try {
JSONObject object = JSON.parseObject(data.toString());
String type = object.getString("type");
if ("childrenmess".equals(type)) {
key = object.getString("school");
list.clear();
pageIndex = 1;
getData(false);
}
} catch (Exception e) { }
}
个人觉得这样写比较烦,个人觉得这个Observeable应该封装在BaseActivity或者BaseFragment中
比如
public abstract class AsukaActivity extends AppCompatActivity implements Observer {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RefreshSender.getInstances().addObserver(this);
initView();
initEvent();
}
/**
* 发消息
* @param type
* @param object
*/
public void sendObseverMsg(String type,JSONObject object){
object.put("type",type);
RefreshSender.getInstances().sendMessage(object.toJSONString());
} protected abstract void initView();
protected abstract void initEvent();
protected abstract void oberserMsg(String type, JSONObject object); @Override
public void update(Observable observable, Object data) {
try {
JSONObject object= JSON.parseObject(data.toString());
String type=object.getString("type");
oberserMsg(type,object);
}catch (Exception e){ }
} @Override
protected void onDestroy() {
super.onDestroy();
RefreshSender.getInstances().deleteObserver(this);
AsukaAndroid.app().getAppManager().finishActivity(this);
}
protected abstract void initView();
protected abstract void initEvent();
protected abstract void oberserMsg(String type, JSONObject object);
}
那么怎么使用呢
使用就很简单了,只要继承AsukaActivity ,发送接收就可以了
继承会有oberserMsg这个方法进行接收
@Override
protected void oberserMsg(String type, JSONObject object) {
if ("workFlow".equals(type)) {
wfid = object.getString("wfid");
arr.clear();
pageIndex = 1;
isUpdate = false;
getData();
}
发送
sendObseverMsg("workFlow", object);
希望大家可以使用
Observable观察者模式的使用的更多相关文章
- JS实现Observable观察者模式
欢迎讨论与交流 : ) 注 代码参考自——汇智网 RxJS教程 前言 Observable观察者模式令小白笔者眼前一亮.数据生产者(observable)负责生产新鲜的数据,同时在生产完毕后'通知“消 ...
- ExtJS要利用观察者模式 去实现自定义的事件
// 要利用观察者模式 去实现自定义的事件 //1:由于浏览器他自己能定义内置的事件(click/blur...) // 我们也应该有一个类似于浏览器这样的类,这个类 自己去内部定义一些事件(自定义事 ...
- 轻量级前端MVVM框架avalon - 整体架构
官网提供架构图 单看这个图呢,还木有说明,感觉有点蛋疼,作者的抽象度太高了,还好在前面已经大概分析过了执行流程 如图 左边是View视图,我们就理解html结构,换句话就是说用户能看到的界面,渲染页面 ...
- 以添加评论组件为例看angular2请求数据的处理
在NiceFish项目中,数据请求处理并没有用Promise的那一套方法,用的是Observable(观察者模式),我将其理解成生产者和消费者模式 如下简单例子:出自(https://segmentf ...
- 【CuteJavaScript】Angular6入门项目(3.编写服务和引入RxJS)
本文目录 一.项目起步 二.编写路由组件 三.编写页面组件 1.编写单一组件 2.模拟数据 3.编写主从组件 四.编写服务 1.为什么需要服务 2.编写服务 五.引入RxJS 1.关于RxJS 2.引 ...
- 设计模式--观察者模式初探和java Observable模式
初步认识观察者模式 观察者模式又称为发布/订阅(Publish/Subscribe)模式,因此我们可以用报纸期刊的订阅来形象的说明: 报社方负责出版报纸. 你订阅了该报社的报纸,那么只要报社发布了新报 ...
- java中观察者模式Observable和Observer
25.java中观察者模式Observable和Observer 如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口 观察者设计模式 现在很多的 ...
- 25、java中观察者模式Observable和Observer
如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口 观察者设计模式 现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房 ...
- Java_观察者模式(Observable和Observer)
http://blog.csdn.net/tianjf0514/article/details/7475164/ 一.观察者模式介绍 在Java中通过Observable类和Observer接口实现了 ...
随机推荐
- 搭建svnserve并创建提交钩子
之前做过很多这个过程了,但每次总有些地方不记得要查资料,现在顺手记录一下,以后好查. 安装svn apt-get install subversion 创建代码仓库 svnadmin create & ...
- Netty源码分析之NioEventLoop(转)
原文:http://www.jianshu.com/p/9acf36f7e025 上一章节中,我们分析了Netty服务的启动过程,本章节分析Netty的NioEventLoop是如工作的. NioEv ...
- 2015 Multi-University Training Contest 1记录
1001 OO's Sequence 分析: 对于例子,能够得到,我们要求的是(1,1)(1,2)(1,3)(1,4)(1,5)(2,2)(2,3)(2,4)(2,5)(3,3)(3,4)(3,5)( ...
- Struts2数据类型转换之批量数据转换
前面我们实现了从字符串到User对象的转换.如果表单中有多个User数据,我们可以批量转换. 我们把input.jsp修改为: <h1>使用分号隔开username password< ...
- Django开发博客(七)——markdown优化
背景 上一次把markdown集成之后.发现还是有非常多问题. 这次须要做一些优化. 1.markdown与普通文本的差别显示. 2.添加点击量的统计 3.加入名片卡的滑动 版本号相关 操作系统:Ma ...
- selenium从入门到应用 - 7,testNG的DataProvider
本系列所有代码 https://github.com/zhangting85/simpleWebtest 本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境下 ...
- Linux Ubuntu 开机自动启动项设置方法 例:svn服务
在init.d目录建立一个脚本文件svnd.sh # cd /etc/init.d # vim svnd.sh 输入svnd.sh内容如下(/kaifa/svn 为svn仓库目录): #!/bin/b ...
- ERROR: ld.so: object '/usr/lib64/libtcmalloc.so.4' from LD_PRELOAD cannot be preloaded: ignored
出现错误: ERROR: ld.so: object '/usr/lib64/libtcmalloc.so.4' from LD_PRELOAD cannot be preloaded: ignore ...
- es备份
#!/bin/bash export LC_ALL=en_US.UTF- export LANG=en_US.UTF- Ip=10.0.10.10 Date=$(date +"%Y%m%d& ...
- Rational Rose2007具体安装步骤
学习了UML.那么Rational rose绘图软件当然就是不可缺少的了. 我的电脑是win7 64位的系统.以下的链接是安装软件以及破解方法.该软件是BIN格式的.也就是镜像文件.须要安装一个虚拟驱 ...