1.概述

观察者模式最常用的地方是GUI系统、订阅-发布系统。观察者模式的一个重要作用就是解耦,将观察者和被观察者解耦,使得他们之间的依赖性更小。

2.定义

定义对象间的一种一对多依赖关系,使得每当一个对象改变状态时,所有依赖他的对象都会得到通知并自动更新。

3.简单的代码实现

观察者

public class MyObserver implements Observer {
public String name;
public MyObserver(String name){
this.name=name;
}
@Override
public void update(Observable observable, Object o) {
System.out.println("Hi,标记下哦"+name+"更新内容:"+o.toString());
}
@Override
public String toString() {
return "观察者姓名:"+name;
}
}

被观察者

public class MyObservable  extends Observable{
public void postNew(String content){
/**
* 标示状态或内容发生改变
*/
setChanged();
notifyObservers(content); }
}

实现

               MyObservable myObservable=new MyObservable();
MyObserver myObserver1=new MyObserver("观察者1");
MyObserver myObserver2=new MyObserver("观察者2");
myObservable.addObserver(myObserver1);
myObservable.addObserver(myObserver2);
myObservable.postNew("这里是更新的内容哦");

运行后会打印:

Hi,标记下哦观察者1更新内容:这里是更新的内容哦
Hi,标记下哦观察者2更新内容:这里是更新的内容哦

4.Observer Observable 

两则都是JDK的内置类型,在以上中Observer是抽象观察者角色,Obsevable是抽象主题,而MyObserver,是具体观察者,MyObservable是具体主题。 MyObserver订阅MyObservable主题后,当MyObservable更新时,会遍历所有的MyObserver,发生通知。在整个的通知系统中是通过Observer和Observable完成的,MyObserver和MyObservable完全没有耦合,保证了订阅的灵活性和可扩展性。

 5.EventBus简单使用 (EventBus 也是使用的订阅,观察者模式)

下载地址 https://github.com/greenrobot/EventBus

注册

  EventBus.getDefault().register(this);

解除注册

 protected void onDestroy(){
super.onDestroy();
EventBus.getDefault().unregister(this);
}

接受事件 3.0需要加入

@Subscribe
方法名
onEventMainThread 可以自定义了。
  @Subscribe
public void onEventMainThread(ItemBean itemBean){ textView.setText(itemBean.msg);
Log.d("harvic", "onEventMainThread收到了消息:" + itemBean.getMsg()); }

发送事件

   EventBus.getDefault().post(new ItemBean("我的EventBus"));

 

Android设计模式—— 观察者模式(以及EventBus的简单使用)的更多相关文章

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

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

  2. Android设计模式---观察者模式小demo(一)

    1,今天刚好看到了设计模式这一块来,而观察者模式是我一直想总结的,先来看看观察者模式的简单的定义吧 "当一个对象改变时,他的所有依赖者都会受到通知,并自动更新." 一般我们项目中就 ...

  3. Android设计模式—观察者模式

    装载请标明出处:https://www.cnblogs.com/tangZH/p/11175120.html  观察者模式 说白了,就是一个对发生改变,所有依赖于它的对象也发生改变,这是一对多的关系. ...

  4. Android设计模式(五岁以下儿童)--简单工厂模式

    1.面试的时候问这个问题: 在ListView 的item小程序.很多不同的显示风格.或者是,为了更好地维护,不同的样式,应该怎么做? 我一下就想到的是工厂的模式,利用project,编写ViewFa ...

  5. android EventBus的简单使用

    今天,简单讲讲Android里关于EventBus的使用. 这几天,由于面试的缘故,我听到了很多Android的流行框架,但是之前自己在公司做APP时并没有使用,所以没有了解.于是在网上查找了资料,学 ...

  6. Android设计模式系列

    http://www.cnblogs.com/qianxudetianxia/category/312863.html Android设计模式系列(12)--SDK源码之生成器模式(建造者模式) 摘要 ...

  7. 18. 星际争霸之php设计模式--观察者模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  8. Android设计模式总结

    1.复合模式:三层架构.MVC.MVP.MVVM 2.设计模式-单例模式 配置类的使用. 3.设计模式-模板方法 通过抽象类或接口提前定义要实现的方法. 4.设计模式-观察者模式 消息的通知. 5.设 ...

  9. js设计模式-观察者模式

    定义: 观察者模式又叫发布订阅模式,它定义了对象间的一种一对多的依赖关系.观察者模式让两个对象松耦合地联系在一起,虽然不太清楚彼此的细节,但这不影响他们之间的互相通信. 思路 定义一个对象,在对象中实 ...

随机推荐

  1. C语言运算符类型

    算术运算符 运算符 描述 + 两个操作数相加 - 第一操作数减去第二个操作数 * 两个操作数相乘 / 分子除以分母 % 模运算和整数除法后的余数 ++ 递增操作增加一个整数值 -- 递减操作减少一个整 ...

  2. springboot-简介

    SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品: 下载地址: Spring Boot 主要目标是: 为所有 Spring ...

  3. 06 Django组件-cookie与session

    一.会话跟踪技术 1.什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而 ...

  4. js给文本添加行号

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. Linux 查看用户命令

    1.Linux里查看所有用户 (1)在终端里.其实只需要查看 /etc/passwd文件就行了. (2)看第三个参数:500以上的,就是后面建的用户了.其它则为系统的用户. 或者用cat /etc/p ...

  6. js:Array对象常用方法介绍

    前言 在js中,数组作为一个特殊的对象.是我们常用的数据格式.今天就来梳理一下常用的数组方法. 1.基础 几种基础的就简单介绍一下:创建数组 var arr1 = new Array(); //括号可 ...

  7. Python 不同列表时间测试

    import timeit import threading def test1(): l = [] for i in range(1000): l = l + [i] def test2(): l ...

  8. 【hdu 6342】Expression in Memories

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把所有的问号都改成'1' 然后会发现只有+0?这种情况 需要把?改成+. 看看这样的0后面的1是不是由问号改过来的就好了.是的话 再 ...

  9. java的数据的类型

    1分类: 基本数据类型长度: Java中简单类型,占用字节数, 以及包装类 浮点数的默认类型是Double(8个字节) 如果想直接想一个变量赋值一个float(4个字节)要在数值后面添加f/F 如同向 ...

  10. ajax短轮询+php与服务器交互制作简易即时聊天网站

    主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Server-sent Events). 本文主要介绍ajax短轮询的简易实现方式. 看懂此文 ...