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接口实现了 ...
随机推荐
- 【前端自动化构建 grunt、gulp、webpack】
参考资料: 用自动化构建工具增强你的工作流程!:http://www.gulpjs.com.cn/ gulp详细入门教程:http://www.ydcss.com/ JavaScript构建(编绎)系 ...
- 当客户端为RemoteAnywhere时Chef-server 使用knife-windows bootstrap的一个问题
笔者在使用knife-windows bootstrap 一个安装了RemoteAnywhere的节点遇到一个坑: knife bootstrap 192.168.1.245 -r 'role[my_ ...
- HTTP/2 Server Push 详解(上)
收录待用,修改转载已取得腾讯云授权 译者:TAT.Johnny 原文:https://www.smashingmagazine.com/2017/04/guide-http2-server-push/ ...
- REOBJECT structure
REOBJECT structure 包含丰富编辑控件中的OLE或图像对象的信息. Syntax 语法 typedef struct _reobject { DWORD cbStruct; LON ...
- c# word 操作
public class WordOperate { #region 新建Word文档 /// <summary> /// 动态生成Word文档并填充内容 /// </summary ...
- 用C++实现文件压缩(1 哈弗曼编码)
今天下午想把文件压缩写一下,因为我觉得这个还是比较锻炼技术的,对数据结构的要求应该比较高,权当练习了吧. 我采用的压缩方式是Huffman编码,不过比较囧的是,我拼写拼错了,我拼的是haffman,在 ...
- 用箭头函数精简Vue 模块
https://www.zcfy.cc/article/clean-up-your-vue-modules-with-es6-arrow-functions-dotdev 使用箭头函数,this指向v ...
- Altium Designer 10 | 常用库及部分元件名中英文对照表
———————————————————————————————————————————— 常用库及部分元件名中英文对照表 - - - - - - - - - - - - - - - - - - - - ...
- C/C++ linux下光标定位和清屏函数
printf("\033[47;31mhello world\033[5m"); 47是字背景颜色, 31是字体的颜色, hello world是字符串. 后面的\033[5m是 ...
- iOS 之UIBezierPath
代码地址如下:http://www.demodashi.com/demo/11602.html 在之前的文章中,由于用到过UIBezierPath这个类,所以这里就对这个类进行简单的记录一下,方便自己 ...