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接口实现了 ...
随机推荐
- [TypeScript] Use the TypeScript "unknown" type to avoid runtime errors
The "any" type can be very useful, especially when adding types to an existing JavaScript ...
- 基于STC12C5A的MINI3216多功能点阵时钟
代码地址如下:http://www.demodashi.com/demo/12862.html 基于STC12C5A的MINI3216多功能点阵时钟 硬件详解 PCB 硬件原理图 主控模块 max72 ...
- (三)EasyUI 使用——form表单1
form表单组件主要有以下内容(如下图) 1. validatebox验证框 姓名:必填/1-4个字符/必填中文 邮箱:必填/1-30个字符/必填符合邮箱格式/后缀必须是com或cn 密码验证 ...
- python下载腾讯云慢日志并发送邮件附件
这里没优化,只是对腾讯云下载慢日志,然后通过邮件发送出去 #!/usr/bin/env python # encoding: utf-8 import json import smtplib impo ...
- Git使用笔记三
场景:开源社区提交代码每个人每一个MR只有两个commits,一个是merge前的,一个是merge时候的.因为他们不过是把自己在同一个PR上面提交的commits全部压缩成了一个而已.这个在git上 ...
- Effective C++ 条款47
本节条款的题目:请使用trait classes来表示类型信息 本节条款主要讲述的技术是怎样在编译期间实现对迭代器类型的推断,依据推断的类型进行最优处理. 我们先来看一下迭代器的种类: 1.input ...
- MII、GMII、RMII、SGMII、XGMII、XAUI、Interlaken
MII即媒体独立接口,也叫介质无关接口.它是IEEE-802.3定义的以太网行业标准.它包括一个数据接口,以及一个MAC和PHY之间的管理接口(图1).数据接口包括分别用于发送器和接收器的两条独立信道 ...
- C++语言基础(3)-类和对象
类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量:创建对象的过程也叫类的实例化.每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数. 一.类的定义 一 ...
- GroupCoordinator joingroup源码解析
转发请注明原创地址 http://www.cnblogs.com/dongxiao-yang/p/7463693.html kafka新版consumer所有的group管理工作在服务端都由Group ...
- iOS 集成微信支付【转载】
目前项目里有微信支付的需求,调研过一段时间后,发现其实并没有想象中的那么困难.如果你只是想实现该功能,一个方法足以,但是若你想深入了解实现原理.就需要花费更多的功夫了.目前我只清楚微信支付需要做签名, ...