本文实例讲述了Android开发实现简单的观察者与被观察者。分享给大家供大家参考,具体如下:

概述:

观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。

观察者模式结构图

Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。

ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知。

Observer:抽象观察者,是观察者者的抽象类,它定义了一个更新接口,使得在得到主题更改通知时更新自己。

ConcrereObserver:具体观察者,是实现抽象观察者定义的更新接口,以便在得到主题更改通知时更新自身的状态。

实现方法

1、创建接口观察者(Watcher.java):

package watch;

public interface Watcher {

void update(String str);

}

2、创建接口被观察者(Watched.java):

package watch;

public interface Watched {

void adWatcherh(Watcher watcher);

void removeWatcherh(Watcher watcher);

void notifyAll(String str);

}

3、创建观察者实现接口(ConWatcher.java):

package watch;

public class ConWatcher implements Watcher {

@Override

public void update(String str) {

System.out.println(str);

}

}

4、创建被观察者实现接口(ConWatched.java):

package watch;

import java.util.ArrayList;

import java.util.List;

public class ConWatched implements Watched {

List list = new ArrayList();

@Override

public void adWatcherh(Watcher watcher) {

list.add(watcher);

}

@Override

public void removeWatcherh(Watcher watcher) {

list.remove(watcher);

}

@Override

public void notifyAll(String str) {

for (Watcher watcher : list){

watcher.update(str);

}

}

}

5、测试(WatchTest.java):

package watch;

public class WatchTest {

public static void main(String[] args) throws Exception{

ConWatched conWatched = new ConWatched();

ConWatcher conWatcher1 = new ConWatcher();

ConWatcher conWatcher2 = new ConWatcher();

ConWatcher conWatcher3 = new ConWatcher();

System.out.println("脚本之家测试结果:");

conWatched.adWatcherh(conWatcher1);

conWatched.adWatcherh(conWatcher2);

conWatched.adWatcherh(conWatcher3);

conWatched.notifyAll("I am coming");

}

}

文件目录结构:

运行结果:

希望本文所述对大家Android程序设计有所帮助。

android 观察者,Android开发实现简单的观察者与被观察者示例相关推荐

  1. android+Unity3D游戏开发之简单的物体运动

    android+Unity3D游戏开发之简单的物体运动 其实这篇也是转载的,真的感觉对于我们初学者来说很不错的,不信你看看嘛;原创链接:http://bbs.9ria.com/thread-98192 ...

  2. Android监听作用,Android开发之CheckBox的简单使用与监听功能示例

    本文实例讲述了Android开发之CheckBox的简单使用与监听功能.分享给大家供大家参考,具体如下: activity_main.xml android:layout_width="ma ...

  3. Android小游戏开发:简单的合金弹头游戏(一)游戏框架

    本篇博客适合给初学安卓,熟悉基本的JAVA语法,并希望用安卓写个小游戏的初学者参考,因为博主也因大学课程需要,是在2个星期内自学的JAVA和安卓开发,可能会有一些错误和需要优化的地方,望指出 我在这2 ...

  4. Android之NDK开发的简单实例

    NDK全称为Native Development Kit,是本地开发工具集.在Android开发中,有时为了能更好的重用以前的C/C++的代码,需要将这些代码编译成相应的so,然后通地JNI以供上层J ...

  5. Android移动应用开发学习——简单实现视频新闻APP

    1.登录页 2.新闻列表页--小屏大屏切换 3.视频播放页 登录页 视频列表页 小屏显示视频标题 大屏左侧显示视频标题,右侧显示视频播放 视频播放页 核心代码

  6. Android 音视频开发之基础篇 使用 imageview绘制一张图片

    Android 音视频开发 任务一 ImageView 绘制图片 文章目录 Android 音视频开发 任务一 ImageView 绘制图片 前言 一.配置activity_main.xml 二.添加 ...

  7. android观察者模式被观察者,Android的设计模式-观察者模式

    前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中: 1.定义 定义对象间的一种一个对多的依赖关系,当一个对象的状态发送改变时,所以依赖于它的对象都得到通知并被自动更新. 2.介绍 观察 ...

  8. Android开发环境简单配置

    为什么80%的码农都做不了架构师?>>>    ·         Android开发环境简单配置 写这个系列的原因也是因为自己对android比较感兴趣,而网上多数教程都是直接参照 ...

  9. 文件管理器android实现,Android开发之简单文件管理器实现方法

    易采站长站为您分析Android开发之简单文件管理器实现方法,简单实现了Android的文件目录查看,文件重命名,打开,删除等功能,需要的朋友可以参考下 本文实例讲述了Android开发之简单文件管理 ...

最新文章

  1. Ubuntu 14.04 64bit安装IPython
  2. valgrind——Callgrind检测程序代码的运行时间和调用过程,程序分析性能。
  3. java 判断exception类型_Checked Exception | Java语言设计者的失误?
  4. 微信公众号Java开发-笔记02【开发接入准备、开发接入】
  5. 自动,MySQL触发器,完整详细可收藏
  6. Linux下出现ping:unknown host xxx.xxx问题的解决办法
  7. MySQL入门之视图
  8. Java 蓝桥杯 装箱问题
  9. html与表格无关的标记,表格和HTML5标记
  10. k8s与caas--容器云caas平台的落地实践
  11. 3,ActiveMQ-入门(基于JMS发布订阅模型)
  12. 计算机维护工作周报,运维周报怎么写呀,这一周没什么事做
  13. json.stringify php,json.stringify()方法如何使用
  14. win下编译TNN安卓库(静态或者动态) + android studio ndk调用
  15. APS先进规划与生产排程系统--介绍
  16. jvm精通之柳暗花明
  17. timeout参数使用,转贴
  18. hibernate lazy属性参数说明
  19. VMware设置虚拟机连接内外网
  20. Unity 3D PC平台发布|| Unity 3D Web 平台发布||Unity 3D Android平台发布

热门文章

  1. SugarCRM 在Html中增加超连接按钮
  2. .net 内嵌 GeckoWebBrowser (firefox) 核心浏览器
  3. 微信公众号 JSSDK 提示:invalid signature
  4. springMvc的一些简介 和基于xml的handlerMapping基本流程
  5. 走向DBA[MSSQL篇] - 从SQL语句的角度提高数据库的访问性能
  6. php json和数组,php数组和json数组之间的互相转化
  7. 写1行代码影响1000000000人,这是个什么项目?
  8. 浅谈Nginx负载均衡与F5(硬件)的区别
  9. 比较正宗的验证邮箱的正则表达式js代码详解
  10. PHP的composer报错 failed loading cafile stream: `C:\Users\Administrator\Ap pData\Local\Temp\opeB1C9.t