Android设计模式—— 观察者模式(以及EventBus的简单使用)
2024-08-26 07:32:50
1.概述
观察者模式最常用的地方是GUI系统、订阅-发布系统。观察者模式的一个重要作用就是解耦,将观察者和被观察者解耦,使得他们之间的依赖性更小。
2.定义
定义对象间的一种一对多依赖关系,使得每当一个对象改变状态时,所有依赖他的对象都会得到通知并自动更新。
3.简单的代码实现
观察者
public class MyObserver implements Observer {
public String name;
public MyObserver(String name){
this.name=name;
}
@Override
public void update(Observable observable, Object o) {
System.out.println("Hi,标记下哦"+name+"更新内容:"+o.toString());
}
@Override
public String toString() {
return "观察者姓名:"+name;
}
}
被观察者
public class MyObservable extends Observable{
public void postNew(String content){
/**
* 标示状态或内容发生改变
*/
setChanged();
notifyObservers(content); }
}
实现
MyObservable myObservable=new MyObservable();
MyObserver myObserver1=new MyObserver("观察者1");
MyObserver myObserver2=new MyObserver("观察者2");
myObservable.addObserver(myObserver1);
myObservable.addObserver(myObserver2);
myObservable.postNew("这里是更新的内容哦");
运行后会打印:
Hi,标记下哦观察者1更新内容:这里是更新的内容哦
Hi,标记下哦观察者2更新内容:这里是更新的内容哦
4.Observer Observable
两则都是JDK的内置类型,在以上中Observer是抽象观察者角色,Obsevable是抽象主题,而MyObserver,是具体观察者,MyObservable是具体主题。 MyObserver订阅MyObservable主题后,当MyObservable更新时,会遍历所有的MyObserver,发生通知。在整个的通知系统中是通过Observer和Observable完成的,MyObserver和MyObservable完全没有耦合,保证了订阅的灵活性和可扩展性。
5.EventBus简单使用 (EventBus 也是使用的订阅,观察者模式)
下载地址 https://github.com/greenrobot/EventBus
注册
EventBus.getDefault().register(this);
解除注册
protected void onDestroy(){
super.onDestroy();
EventBus.getDefault().unregister(this);
}
接受事件 3.0需要加入
@Subscribe
方法名
onEventMainThread 可以自定义了。
@Subscribe
public void onEventMainThread(ItemBean itemBean){ textView.setText(itemBean.msg);
Log.d("harvic", "onEventMainThread收到了消息:" + itemBean.getMsg()); }
发送事件
EventBus.getDefault().post(new ItemBean("我的EventBus"));
最新文章
- Java 策略模式和状态模式
- sonarqube插件开发(一) 环境搭建
- 8-IO总结
- 驱动开发之 创建线程函数PsCreateSystemThread
- java web 代码
- webSocket浏览器握手不成功(解决)
- Linux下I/O多路转接之epoll(绝对经典)
- 高通msm8994性能及温度监测脚本
- 基本promise
- 基于Metronic的Bootstrap开发框架经验总结(16)-- 使用插件bootstrap-table实现表格记录的查询、分页、排序等处理
- Kindle2018 一周使用报告
- 占满屏幕的宽高,当把textarea换成其他标签的时候,怎么才能编辑?
- 大数据java基础day01
- Java生成8位随机邀请码,不重复
- 强大的CSS3动画库animate.css
- 深入理解java集合框架之---------Arraylist集合 -----添加方法
- Android开发 使用HBuilder的缓存方法
- python全栈开发-面向对象-初识2
- Machine Learning in Action-chapter2-k近邻算法
- iOS如何让主界面不显示NavigationBar