*/
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观察者模式相关推荐

  1. android智能!46道面试题带你了解中高级Android面试,吐血整理

    前言 大家应该看过不少人分享的面试成功的面经,是不是觉得自己"说不定也可以"呢? 这里重提一个理论:幸存者偏差.当取得资讯的渠道,仅来自于幸存者时(因为死人不会说话),此资讯可能会 ...

  2. android studio创建一个类继承application_带你全方位了解Android中的Context

    这道题想考察什么? 是否熟悉Context类结构 是否熟悉Application,Activity,Service和Context的依赖关系 Application,Activity,Service中 ...

  3. 一个简单的死锁demo以及死锁分析

    废话不多说,直接贴上demo代码: import java.util.concurrent.TimeUnit;public class DeadlockTest {public static void ...

  4. Android中ICS4.0源码Launcher启动流程分析【android源码Launcher系列一】

    最近研究ICS4.0的Launcher,发现4.0和2.3有稍微点区别,但是区别不是特别大,所以我就先整理一下Launcher启动的大致流程.Launcher其实是贯彻于手机的整个系统的,时时刻刻都在 ...

  5. Android模拟器学framework和driver之传感器篇3(Android HAL)

    Android模拟器学framework和driver之传感器篇3(Android HAL) 前面,带着大家一起写了一个temperature sensor的驱动,已经一个测试tool来测试这个驱动, ...

  6. 【转】Android事件分发机制完全解析,带你从源码的角度彻底理解(下)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9153761 记得在前面的文章中,我带大家一起从源码的角度分析了Android中Vi ...

  7. 一个Demo带你彻底掌握View的滑动冲突

    本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 近期在又一次学习Android自己定义View这一块的内容.遇到了平时开发中常常碰到的一个棘手问题:View的滑 ...

  8. 用java开发一个简单的安卓程序,Android NDK开发简单程序分享(Hello Word!)

    在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...

  9. Android动画了解—一些项目案例分析

    文章目录 写在前面 带路径运动的过渡动画 整体缩放的效果 整体宽高改变的过渡效果 两个界面布局的过渡效果 带水波纹布局的效果 几行代码实现转圈圈的效果 界面翻转的效果 写在前面 最近听说MIUI 12 ...

最新文章

  1. 使用Spring Data Redis操作Redis(集群版)
  2. 2020-12-14 Matlab 模糊控制 车辆泊车 案例分享
  3. [zjoi2015]幻想乡战略游戏
  4. php ip处理函数,PHP取ip地址函数
  5. word List29
  6. 7. 整数反转 golang
  7. tornado学习笔记day02-进阶与提升
  8. ae自动曝光_拾光剪影|手机摄影对焦曝光与Ae使用
  9. using namespace std;的陷阱
  10. CentOS 7 安装Java 1.8
  11. [Linux]如何读取Kernel cmdline
  12. Spring+Struts2+Hibernate概述
  13. 6842. 【2020.11.5提高组模拟】淘淘蓝蓝之扮猪吃愉悦
  14. 淘特,阿里在下沉市场的一把好刀
  15. 编写一个Linux虚拟网卡来实现类NVI
  16. 用友U8 cloud再升级,为成长型集团注入数智新力量
  17. 人话解读LGPLv3
  18. C语言数据类型、运算符、表达式
  19. DAY2-python数据类型、字符编码、文件处理
  20. [INVEST]2018年国庆后黄金是否值得投资小结

热门文章

  1. P5.js开发之——通过createVideo向页面中添加视频
  2. 搞不懂DMP是什么?看这里就够了
  3. 张小龙 2019 微信公开课总结的 20 条微信未来发展重点
  4. java毕业设计人人小说系统mybatis+源码+调试部署+系统+数据库+lw
  5. Double取值intValue()与doubleValue()
  6. Spring入门(J2EE的春天)
  7. 计算机排位函数升序是0还是1,Excel中Rank函数排序的方法,包含相同数字按顺序排位和分段排序-excel排序...
  8. 烽火通信张宾:智慧光网,开创工业互联网新时代
  9. 2019年深思杯write up(一)
  10. 漫画 | 硬盘装满电影后会变重吗?