Android—用最简单的案例Demo带你分析解读:Android观察者模式
*/
public abstract class Service {
/**
- 增加我要通知者,这里存入的是抽象(抽象包括抽象类或)
- @param iPhone
*/
public abstract void add(IPhone iPhone);
/**
- 发出更新消息给各个手机
*/
public abstract void sendUpdateMsg();
}
package com.oop.demo5;
import java.util.ArrayList;
import java.util.List;
/**
- 华为服务器对象
- @author Liudeli
*/
public class HUAWEIService extends Service {
private List listPhone = new ArrayList();
@Override
public void add(IPhone iPhone) {
listPhone.add(iPhone);
}
@Override
public void sendUpdateMsg() {
for (IPhone iphone : listPhone) {
iphone.update();
}
}
}
package com.oop.demo5;
import java.util.ArrayList;
import java.util.List;
/**
- 戴尔服务器对象
- @author Liudeli
*/
public class DELLService extends Service {
private List listPhone = new ArrayList();
@Override
public void add(IPhone iPhone) {
listPhone.add(iPhone);
}
@Override
public void sendUpdateMsg() {
for (IPhone iphone : listPhone) {
iphone.update();
}
}
}
package com.oop.demo5;
/**
- 更新手机的规范
- @author Liudeli
*/
public interface IPhone {
/**
- 更新所有手机的行为标准规范
*/
public void update();
}
package com.oop.demo5;
/**
- 魅族手机对象
- @author Liudeli
*/
public class MeizuPhone implements IPhone {
public void update() {
System.out.println(“魅族手机需要去更新QQ了哦…”);
}
}
package com.oop.demo5;
/**
- 小米手机对象
- @author Liudeli
*/
public class MIPhone implements IPhone {
public void update() {
System.out.println(“小米手机更新QQ了…”);
}
}
package com.oop.demo5;
/**
- 三星手机对象
- @author Liudeli
*/
public class SamsungPhone implements IPhone {
public void update() {
System.out.println(“三星手机该更新QQ啦…”);
}
}
package com.oop.demo5;
/**
- 步步高手机对象
- @author Liudeli
*/
public class VivoPhone implements IPhone {
public void update() {
System.out.println(“步步高手机需要去更新手机QQ了哦…”);
}
}
/**
- 测试端程序
- @author Liudeli
*/
public class Main {
public s
tatic void main(String[] args) {
// 使用戴尔服务器,来更新手机QQ
Service service = new DELLService();
// 增加观察者(增加需要更新的手机对象)
service.add(new MIPhone());
service.add(new MeizuPhone());
service.add(new SamsungPhone());
service.add(new VivoPhone());
// 给手机发出通知
service.sendUpdateMsg();
System.out.println(“省略…”);
}
}
如果某天,戴尔服务器出问题了,自动切换到备用服务器 华为服务器:
// 使用华为服务器,来更新手机QQ
Service service = new HUAWEIService();
案例二:(通知同事)
package com.oop.demo3;
/**
- 定义观察者抽象类
- @author Liudeli
*/
public abstract class Observer {
private String name;
private ISecretary secretary;
public Observer(String name, ISecretary secretary) {
this.name = name;
this.secretary = secretary;
}
/**
- 更新
*/
public abstract void update();
}
package com.oop.demo3;
/**
- 不能依赖细节,细节应该依赖抽象,老板,和秘书,和其他秘书都是细节,抽象则是这些细节所定义的规范
- @author Liudeli
*/
public interface ISecretary {
/**
- 增加
- @param stockObserver
*/
public void add(Observer observer);
/**
- 通知
*/
public void notice();
/**
- 前台状态
*/
public String getAction();
public void setAction(String action);
}
package com.oop.demo3;
/**
- 定义股票观察员对象
- @author Liudeli
*/
public class StockObserver extends Observer{
private String name;
private ISecretary secretary;
public StockObserver(String name, ISecretary secretary) {
super(name, secretary);
this.name = name;
this.secretary = secretary;
}
@Override
public void update() {
System.out.println(secretary.getAction() + name + " 请你关闭股票行情,继续工作");
}
}
package com.oop.demo3;
/**
- 定义看NBA的同事
- @author Liudeli
*/
public class NBAObserver extends Observer {
private String name;
private ISecretary secretary;
public NBAObserver(String name, ISecretary secretary) {
super(name, secretary);
this.name = name;
this.secretary = secretary;
}
@Override
public void update() {
System.out.println(secretary.getAction() + name + " 请你关闭NBA视频画面,继续工作");
}
}
package com.oop.demo3;
import java.util.ArrayList;
import java.util.List;
/**
- 前台秘书类
- @author Liudeli
*/
public class Secretary implements ISecretary{
/**
- 定义同事集合
*/
private List list = new ArrayList();
/**
- 增加
- @param stockObserver
*/
public void add(Observer observer) {
list.add(observer);
}
/**
- 通知
*/
public void notice() {
for (Observer observer : list) {
observer.update();
}
}
/**
- 前台状态
*/
private String action;
public String getAction() {
return this.action;
}
public void setAction(String action) {
this.action = action;
}
}
package com.oop.demo3;
import java.util.ArrayList;
import java.util.List;
/**
- 老板对象
- @author Liudeli
*/
public class Boss implements ISecretary {
/**
- 定义同事集合(具体抽象)
*/
private List list = new ArrayList();
/**
- 增加
- @param stockObserver
*/
public void add(Observer observer) {
list.add(observer);
tion) {
this.action = action;
}
}
package com.oop.demo3;
import java.util.ArrayList;
import java.util.List;
/**
- 老板对象
- @author Liudeli
*/
public class Boss implements ISecretary {
/**
- 定义同事集合(具体抽象)
*/
private List list = new ArrayList();
/**
- 增加
- @param stockObserver
*/
public void add(Observer observer) {
list.add(observer);
Android—用最简单的案例Demo带你分析解读:Android观察者模式相关推荐
- android智能!46道面试题带你了解中高级Android面试,吐血整理
前言 大家应该看过不少人分享的面试成功的面经,是不是觉得自己"说不定也可以"呢? 这里重提一个理论:幸存者偏差.当取得资讯的渠道,仅来自于幸存者时(因为死人不会说话),此资讯可能会 ...
- android studio创建一个类继承application_带你全方位了解Android中的Context
这道题想考察什么? 是否熟悉Context类结构 是否熟悉Application,Activity,Service和Context的依赖关系 Application,Activity,Service中 ...
- 一个简单的死锁demo以及死锁分析
废话不多说,直接贴上demo代码: import java.util.concurrent.TimeUnit;public class DeadlockTest {public static void ...
- Android中ICS4.0源码Launcher启动流程分析【android源码Launcher系列一】
最近研究ICS4.0的Launcher,发现4.0和2.3有稍微点区别,但是区别不是特别大,所以我就先整理一下Launcher启动的大致流程.Launcher其实是贯彻于手机的整个系统的,时时刻刻都在 ...
- Android模拟器学framework和driver之传感器篇3(Android HAL)
Android模拟器学framework和driver之传感器篇3(Android HAL) 前面,带着大家一起写了一个temperature sensor的驱动,已经一个测试tool来测试这个驱动, ...
- 【转】Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9153761 记得在前面的文章中,我带大家一起从源码的角度分析了Android中Vi ...
- 一个Demo带你彻底掌握View的滑动冲突
本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 近期在又一次学习Android自己定义View这一块的内容.遇到了平时开发中常常碰到的一个棘手问题:View的滑 ...
- 用java开发一个简单的安卓程序,Android NDK开发简单程序分享(Hello Word!)
在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...
- Android动画了解—一些项目案例分析
文章目录 写在前面 带路径运动的过渡动画 整体缩放的效果 整体宽高改变的过渡效果 两个界面布局的过渡效果 带水波纹布局的效果 几行代码实现转圈圈的效果 界面翻转的效果 写在前面 最近听说MIUI 12 ...
最新文章
- 使用Spring Data Redis操作Redis(集群版)
- 2020-12-14 Matlab 模糊控制 车辆泊车 案例分享
- [zjoi2015]幻想乡战略游戏
- php ip处理函数,PHP取ip地址函数
- word List29
- 7. 整数反转 golang
- tornado学习笔记day02-进阶与提升
- ae自动曝光_拾光剪影|手机摄影对焦曝光与Ae使用
- using namespace std;的陷阱
- CentOS 7 安装Java 1.8
- [Linux]如何读取Kernel cmdline
- Spring+Struts2+Hibernate概述
- 6842. 【2020.11.5提高组模拟】淘淘蓝蓝之扮猪吃愉悦
- 淘特,阿里在下沉市场的一把好刀
- 编写一个Linux虚拟网卡来实现类NVI
- 用友U8 cloud再升级,为成长型集团注入数智新力量
- 人话解读LGPLv3
- C语言数据类型、运算符、表达式
- DAY2-python数据类型、字符编码、文件处理
- [INVEST]2018年国庆后黄金是否值得投资小结
热门文章
- P5.js开发之——通过createVideo向页面中添加视频
- 搞不懂DMP是什么?看这里就够了
- 张小龙 2019 微信公开课总结的 20 条微信未来发展重点
- java毕业设计人人小说系统mybatis+源码+调试部署+系统+数据库+lw
- Double取值intValue()与doubleValue()
- Spring入门(J2EE的春天)
- 计算机排位函数升序是0还是1,Excel中Rank函数排序的方法,包含相同数字按顺序排位和分段排序-excel排序...
- 烽火通信张宾:智慧光网,开创工业互联网新时代
- 2019年深思杯write up(一)
- 漫画 | 硬盘装满电影后会变重吗?