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

文章展示了如何使用Java编程实现观察者模式,通过DELLService类管理多个IPhone对象,当服务器发送更新消息时,所有连接的手机执行update方法。另外,还提到当主服务器出现问题时,可以切换到备用服务器华为服务器进行手机更新操作。
摘要由CSDN通过智能技术生成

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;

/**

  • 测试程序
  • @author Liudeli

*/
public class Main {

public static void main(String[] args) {

// 前台小姐如花
ISecretary secretary = new Secretary();

// 看股票的两位同事
StockObserver stockObserver1 = new StockObserver(“刘奋”, secretary);
StockObserver stockObserver2 = new StockObserver(“刘忙”, secretary);

// 看NBA的一位同事
NBAObserver nbaObserver = new NBAObserver(“黄流”, secretary);

// 如花记下两位同事
secretary.add(stockObserver1);
secretary.add(stockObserver2);

// 如花记下一个看NBA的同事
secretary.add(nbaObserver);

// 发现老板回来了
secretary.setAction(“老板回来了!”);

// 通知通知,老板回来了
secretary.notice();
}

}

运行结果:



简化理解:

抽象通知类

/**

  • 主题,抽象通知类
  • @author Liudeli

*/
public abstract class Subject {

/**

  • 增加
  • @param observer

学习分享

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

image

七大模块学习资料:如NDK模块开发、Android框架体系架构…

image

2021大厂面试真题:

image

只有系统,有方向的学习,才能在短时间内迅速提高自己的技术,只有不断地学习,不懈的努力才能拥有更好的技术,才能在互联网行业中立于不败之地。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

[外链图片转存中…(img-rV0zKktL-1714706099927)]

七大模块学习资料:如NDK模块开发、Android框架体系架构…

[外链图片转存中…(img-5LvKX2Re-1714706099927)]

2021大厂面试真题:

[外链图片转存中…(img-xXASL4dW-1714706099927)]

只有系统,有方向的学习,才能在短时间内迅速提高自己的技术,只有不断地学习,不懈的努力才能拥有更好的技术,才能在互联网行业中立于不败之地。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简明、完整、全面的安卓开发demo集合,包含如下示例 1、LinearLayout Button、RadioGroup、 CheckBox 2、TableLayout 3、FrameLayout 霓虹灯效果 4、RelativeLayout 梅花效果 5、自定义view跟着触点走的小球 6、 ListView 列表视图 7、WebView web视图 8、ToggleButton 动态布局效果 9、AnalogClock 、 DigitalClock and Chronometer 时钟和数字日期 10、AutoCompleteTextView 根据输入自动补充可能的全部 11、Spinner View 选择框(弹出框形式选择) 12、DatePicker TimePicker View 日期时间选择器 13、ProgressBar View 普通进度条、显示在标题栏上的进度条 14、RatingBar View 评级 15、 SeekBar 拖动条,音量调节效果 16、ScrollView 、HorizontalScrollView 垂直和水平滚动条 17、ScrollView 、HorizontalScrollView 垂直和水平滚动条 18、ExpandableListView 分组可展开收缩的ListView 19、Notification 状态栏通知 20、GridView、ImageSwitcher 21、SmsManager 消息管理器,发短信(这里是模拟器只能给其它模拟器发短信) 22、Intent Action、Category属性 测试 23、系统 Action、Category属性 24、ClipDrawable 徐徐展开的风景 25、AnimationDrawable 会动的图片 26、Menu、SubMenu、ContextMenu xml配置menu 27、Attribute 自定义view的duration属性 控制图片的透明度 28、Bitmap、BitmapFactory 图形与图像处理 29、Canvas 绘制自定义图形 30、Canvas 采用双缓存实现画图板 31、SharedPreference 简单的key-value数据存取 32、SQLiteDatabase 安卓客户端的嵌入式数据库 33、GestureDetector + ViewFlipper实现翻页效果 34、GestureLiberay 自定义手势 35、GestureLiberay 通过自定义的手势实现用户操作 36、TextToSpeech 语音朗读 37、ContentProvider、ContentResolver 应用之间共享数据 38、 Service 相当于没有界面的activity 39、Activity与Service运行中通信 40、Service 相当于没有界面的activity 41、AIDL Service android中的跨进程调用 客户端,服务端见AidlService 42、BroadcastReceiver 接收广播消息 43、非UI线程中不能操作UI线程中的View测试 44、ImageSwitcher animation gesture实现可以滑动的跑马灯 45、下载状态栏显示下载进度 46、Gallery3d效果 47、ListView 上拉加载更多效果 48、异步加载图片的二级缓存技术 49、QQ的好友列表展示效果 50、Fragment + ViewPager实现tab滑动切换 51、能够显示在桌面前面的的歌词效果 52、activity切换特效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值