Android设计模式之观察者模式

一、定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。

二、核心角色:

Subject:抽象主题被观察的角色,管理观察者集合,提供注册/注销方法,定义通知逻辑。

ConcreteSubject:具体主题,存储具体状态数据,状态变更时触发通知。

Observer:抽象观察者,定义更新接口,使得主题状态发生变化时更新自己。

ConcreteOberver:具体观察者,实现抽象观察者的更新接口,以便主题状态发生变化时更新自身状态。

三、简单代码示例:

// 观察者接口

public interface Observer {

void update(String message);

}

// 被观察者抽象类

public abstract class Subject {

private List<Observer> observers = new ArrayList<>();

public void attach(Observer observer) {

observers.add(observer);

}

public void detach(Observer observer) {

observers.remove(observer);

}

public void notifyObservers(String message) {

for (Observer observer : observers) {

observer.update(message);

}

}

}

// 具体被观察者(如网络请求模块)

public class NetworkManager extends Subject {

public void onDataReceived(String data) {

notifyObservers(data); // 数据到达时通知观察者

}

}

// 具体观察者(如UI组件)

public class UIComponent implements Observer {

@Override

public void update(String message) {

Log.d("ObserverDemo", "更新UI:" + message);

}

}

NetworkManager manager = new NetworkManager();

manager.attach(new UIComponent());

manager.onDataReceived("新数据"); // 触发UIComponent的update()

四、Android中的应用场景

1.事件驱动机制:按钮点击监听,ListView或RecyclerView的Adapter通过notifyDataSetChanged()通知视图刷新,BroadcastReceiver。

2.数据绑定与状态同步:ContentObserver监听数据库变化,LiveData实现数据驱动UI更新

3.跨模块通信:EventBus,RxBus

五、优缺点:

优点

解耦性强:被观察者无需了解具体观察则细节,仅依赖接口。

扩展灵活:可动态增删观察者,支持多级事件触发。

缺点

性能损耗:大量观察者或高频通知会引发性能问题。

潜在内存泄漏:需要注意观察者生命周期,避免持有无效引用。

相关推荐
dora7 分钟前
Flutter的屏幕适配
android·flutter
SoulKuyan30 分钟前
android 发送onkey广播,Android 添加键值并上报从驱动到上层
android
Yang-Never31 分钟前
ADB->查看某个应用的版本信息
android·adb·android studio
歡進38 分钟前
🔥 每个故事都是一种设计模式
前端·javascript·设计模式
居然是阿宋3 小时前
Android RecyclerView 多布局场景下的设计思考:SRP 与 OCP 的权衡与优化
android·开闭原则·单一职责原则
前行的小黑炭3 小时前
Retrofit框架分析(二):注解、反射以及动态代理,Retrofit框架动态代理的源码分析
android·kotlin·retrofit
zach3 小时前
android项目如何修改第三方类库,导入到自己的项目中
android·前端·架构
三思而后行,慎承诺3 小时前
安卓的Launcher 在哪个环节进行启动
android
WenGyyyL4 小时前
《Android 应用开发基础教程》——第四章:Intent 与 Activity 跳转、页面传值
android·手机·android studio
Wgllss4 小时前
Android图片处理:多合一,多张生成视频,裁剪,放大缩小,滤镜色调,饱和度,亮度调整
android·架构·android jetpack