今天我们公司封装的类中没有加上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观察者模式的使用的更多相关文章

  1. JS实现Observable观察者模式

    欢迎讨论与交流 : ) 注 代码参考自——汇智网 RxJS教程 前言 Observable观察者模式令小白笔者眼前一亮.数据生产者(observable)负责生产新鲜的数据,同时在生产完毕后'通知“消 ...

  2. ExtJS要利用观察者模式 去实现自定义的事件

    // 要利用观察者模式 去实现自定义的事件 //1:由于浏览器他自己能定义内置的事件(click/blur...) // 我们也应该有一个类似于浏览器这样的类,这个类 自己去内部定义一些事件(自定义事 ...

  3. 轻量级前端MVVM框架avalon - 整体架构

    官网提供架构图 单看这个图呢,还木有说明,感觉有点蛋疼,作者的抽象度太高了,还好在前面已经大概分析过了执行流程 如图 左边是View视图,我们就理解html结构,换句话就是说用户能看到的界面,渲染页面 ...

  4. 以添加评论组件为例看angular2请求数据的处理

    在NiceFish项目中,数据请求处理并没有用Promise的那一套方法,用的是Observable(观察者模式),我将其理解成生产者和消费者模式 如下简单例子:出自(https://segmentf ...

  5. 【CuteJavaScript】Angular6入门项目(3.编写服务和引入RxJS)

    本文目录 一.项目起步 二.编写路由组件 三.编写页面组件 1.编写单一组件 2.模拟数据 3.编写主从组件 四.编写服务 1.为什么需要服务 2.编写服务 五.引入RxJS 1.关于RxJS 2.引 ...

  6. 设计模式--观察者模式初探和java Observable模式

    初步认识观察者模式 观察者模式又称为发布/订阅(Publish/Subscribe)模式,因此我们可以用报纸期刊的订阅来形象的说明: 报社方负责出版报纸. 你订阅了该报社的报纸,那么只要报社发布了新报 ...

  7. java中观察者模式Observable和Observer

    25.java中观察者模式Observable和Observer 如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口 观察者设计模式 现在很多的 ...

  8. 25、java中观察者模式Observable和Observer

    如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口 观察者设计模式 现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房 ...

  9. Java_观察者模式(Observable和Observer)

    http://blog.csdn.net/tianjf0514/article/details/7475164/ 一.观察者模式介绍 在Java中通过Observable类和Observer接口实现了 ...

随机推荐

  1. 搭建svnserve并创建提交钩子

    之前做过很多这个过程了,但每次总有些地方不记得要查资料,现在顺手记录一下,以后好查. 安装svn apt-get install subversion 创建代码仓库 svnadmin create & ...

  2. Netty源码分析之NioEventLoop(转)

    原文:http://www.jianshu.com/p/9acf36f7e025 上一章节中,我们分析了Netty服务的启动过程,本章节分析Netty的NioEventLoop是如工作的. NioEv ...

  3. 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)( ...

  4. Struts2数据类型转换之批量数据转换

    前面我们实现了从字符串到User对象的转换.如果表单中有多个User数据,我们可以批量转换. 我们把input.jsp修改为: <h1>使用分号隔开username password< ...

  5. Django开发博客(七)——markdown优化

    背景 上一次把markdown集成之后.发现还是有非常多问题. 这次须要做一些优化. 1.markdown与普通文本的差别显示. 2.添加点击量的统计 3.加入名片卡的滑动 版本号相关 操作系统:Ma ...

  6. selenium从入门到应用 - 7,testNG的DataProvider

    本系列所有代码 https://github.com/zhangting85/simpleWebtest 本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境下 ...

  7. Linux Ubuntu 开机自动启动项设置方法 例:svn服务

    在init.d目录建立一个脚本文件svnd.sh # cd /etc/init.d # vim svnd.sh 输入svnd.sh内容如下(/kaifa/svn 为svn仓库目录): #!/bin/b ...

  8. 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 ...

  9. es备份

    #!/bin/bash export LC_ALL=en_US.UTF- export LANG=en_US.UTF- Ip=10.0.10.10 Date=$(date +"%Y%m%d& ...

  10. Rational Rose2007具体安装步骤

    学习了UML.那么Rational rose绘图软件当然就是不可缺少的了. 我的电脑是win7 64位的系统.以下的链接是安装软件以及破解方法.该软件是BIN格式的.也就是镜像文件.须要安装一个虚拟驱 ...