java观察者模式
来源:互联网 发布:韩顺平满汉楼数据库 编辑:程序博客网 时间:2024/06/08 06:43
先用简单的语言描述一下该模式,被观察者发生改变的时候通知观察者,用一个现实例子,订阅杂志,当你(观察者)订阅一中杂志(被观察者)后,你(观察者)不用操心什么时候杂志(被观察者)会来,当杂志(被观察者)生产好了就会主动提醒你去取杂志(被观察者发生的改变传给观察者),及观察者订阅好了被观察者,被观察这发生改变的时候通知观察者。这种模式在android中一个应用就是广播broadcast,这是系统级别的观察者模式。
观察者模式的基本实现
1、定义观察者和被观察者接口
观察者接口:
public interface BaseObserver { /** * 接受观察者发送的消息 * @param message */ void receiveMessage(String message);}
被观察者接口
public interface BaseObservable { /** * 添加观察者 * * @param observer */ void addObserver(BaseObserver observer); /** * 添加观察者 * * @param observer */ void removeObserver(BaseObserver observer); /** * 发布消息,提示所以观察着 * * @param string */ void publishTheNews(String string) ;}2、实现接口
实现观察者接口
public class FansObserver implements BaseObserver { private String name; public FansObserver(String name) { this.name = name; } @Override public void receiveMessage(String message) { Log.e("FansObserver", name + "收到消息:" + message); }}实现被观察者接口public class StartObservable implements BaseObservable { private List<BaseObserver> observerList; //单利模式 private static StartObservable startObservable; private StartObservable() { observerList = new ArrayList<>(); } public static StartObservable getStartObservable() { if (startObservable == null) { synchronized (StartObservable.class) { if (startObservable == null) { startObservable = new StartObservable(); } } } return startObservable; } @Override public void addObserver(BaseObserver observer) { observerList.add(observer); } @Override public void removeObserver(BaseObserver observer) { observerList.remove(observer); } @Override public void publishTheNews(String string) { for (BaseObserver observer : observerList) { observer.receiveMessage(string); } }}3、订阅和通知订阅
/** * 创建粉丝(观察者)并且将粉丝添加到明星(被观察者)中 */ private void add() { FansObserver observer = new FansObserver("粉丝1"); FansObserver observer1 = new FansObserver("粉丝2"); FansObserver observer2 = new FansObserver("粉丝3"); BaseObserver observer3 = new BaseObserver() { @Override public void receiveMessage(String message) { Log.e("BaseObserver", "粉丝4"); } }; StartObservable.getStartObservable().addObserver(observer); StartObservable.getStartObservable().addObserver(observer1); StartObservable.getStartObservable().addObserver(observer2); StartObservable.getStartObservable().addObserver(observer3); }通知StartObservable.getStartObservable().publishTheNews("今天多云");执行完这些够会打印
自定义观察者模式基本就实现了。github下载地址:点击这里哦
0 0
- java观察者模式
- java观察者模式
- Java 观察者模式
- Java实现观察者模式
- Java实现观察者模式
- Java 中的观察者模式
- Java观察者模式
- java Observer 观察者模式
- 观察者模式(Java)
- java 接口 观察者模式
- java观察者模式
- Java之观察者模式
- Java 观察者模式
- java 观察者模式
- java中的观察者模式
- java 观察者模式
- java观察者模式介绍
- java观察者模式
- Something need to record
- Head First Mysql笔记
- 程序人生
- JackSon学习笔记(一)
- jQuery练习7——crm项目中的权限控制
- java观察者模式
- 【BLE】CC2541之RSSI
- python永久存储模块
- openVPN Mysql+PAM构建强大的vpn系统
- 自定义圆形图片(借鉴某位大神)
- Web服务器简介、Tomcat的基本使用
- 一个简单的视觉里程计实现(2)----冯兵
- Servlet Servlet的装载三种情况
- STM32的优先级NVIC_PriorityGroupConfig的理解及其使用