新乡市建设局网站,做pc端网站流程,wordpress筛选框,中国工商注册网官网一、定义#xff1a;定义对象间一种一对多的依赖关系#xff0c;使得每当一个对象改变状态#xff0c;则所有依赖于它的对象都会得到通知并被自动更新。
二、核心角色#xff1a; Subject#xff1a;抽象主题被观察的角色#xff0c;管理观察者集合#xff0c;提供注册…一、定义定义对象间一种一对多的依赖关系使得每当一个对象改变状态则所有依赖于它的对象都会得到通知并被自动更新。
二、核心角色 Subject抽象主题被观察的角色管理观察者集合提供注册/注销方法定义通知逻辑。 ConcreteSubject具体主题存储具体状态数据状态变更时触发通知。 Observer抽象观察者定义更新接口使得主题状态发生变化时更新自己。 ConcreteOberver具体观察者实现抽象观察者的更新接口以便主题状态发生变化时更新自身状态。
三、简单代码示例
// 观察者接口 public interface Observer { void update(String message); }
// 被观察者抽象类 public abstract class Subject { private ListObserver 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.跨模块通信EventBusRxBus 五、优缺点
优点 解耦性强被观察者无需了解具体观察则细节仅依赖接口。 扩展灵活可动态增删观察者支持多级事件触发。
缺点 性能损耗大量观察者或高频通知会引发性能问题。 潜在内存泄漏需要注意观察者生命周期避免持有无效引用。