Android—用最简单的案例Demo带你分析解读:Android观察者模式

这篇博客通过DELLService和IPhone接口的实现,展示了Android中的观察者模式,解释了如何使用DELLService来通知不同的手机对象(如MeizuPhone, MIPhone等)进行更新。此外,还提到了观察者模式在通知同事场景的应用,通过Observer和ISecretary接口定义了抽象的观察者和被观察者,展示了如何在变化的状态下通知各个观察者。最后,博主分享了关于NDK和JVM的学习建议,强调理论基础和实践的重要性。" 131183315,9232316,Arduino超声波悬浮装置制作,"['嵌入式硬件', 'stm32', 'Arduino开发', '电子工程', '功率放大']
摘要由CSDN通过智能技术生成

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 static 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);
    }

/**

  • 通知
    */
    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;

尾声

评论里面有些同学有疑问关于如何学习material design控件,我的建议是去GitHub搜,有很多同行给的例子,这些栗子足够入门。

有朋友说要是动真格的话,需要NDK以及JVM等的知识,首现**NDK并不是神秘的东西,**你跟着官方的步骤走一遍就知道什么回事了,无非就是一些代码格式以及原生/JAVA内存交互,进阶一点的有原生/JAVA线程交互,线程交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心NDK干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是JAVA->NDK->.SO->MATLAB这样调用的我原来MATLAB的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的SO包的。
至于JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究JVM的人来做,不如省省心有空看看计算机系统,编译原理。

一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM不是未来30年唯一的虚拟机,JAVA也不一定再风靡未来30年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。
初学者,一句话,多练。

交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心NDK干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是JAVA->NDK->.SO->MATLAB这样调用的我原来MATLAB的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的SO包的。**
至于JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究JVM的人来做,不如省省心有空看看计算机系统,编译原理。

一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM不是未来30年唯一的虚拟机,JAVA也不一定再风靡未来30年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。
初学者,一句话,多练。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值