观察者模式
来源:互联网 发布:无锡亚信数据有限公司 编辑:程序博客网 时间:2024/06/05 17:36
GoF设计模式里面的观察者模式的UML图
PS:发布和订阅(事件监听,mq,多路IO复用)
例如:XX楼盘5-1开盘,你肯定不知道,如果你想知道,肯定要去楼盘登记,留下电话号5-1号销售就会打电话通知你。
Subject 就是抽象主题:它负责管理所有观察者的引用,同时定义主要的事件操作。
ConcreteSubject 具体主题:它实现了抽象主题的所有定义的接口,当自己发生变化时,会通知所有观察者。
Observer 观察者:监听主题发生变化相应的操作接口。
代码案例
public class EventObject implements Serializable { private String type; private Object data; public EventObject(String type, Object data) { this.type = type; this.data = data; } public String getType() { return type; } public Object getData() { return data; }}//subjectpublic interface Lifecycle { public void addLifecycleListener(LifecycleListener listener); public void removeLifecycleListener(LifecycleListener listener); public void fireLifecycleEvent(String type,Object data);}//ConcreteSubject public class LifecycleSubject implements Lifecycle { private CopyOnWriteArrayList<LifecycleListener> cwal = new CopyOnWriteArrayList(); @Override public void addLifecycleListener(LifecycleListener listener) { cwal.add(listener); } @Override public void removeLifecycleListener(LifecycleListener listener) { cwal.remove(listener); } @Override public void fireLifecycleEvent(String type, Object data) { EventObject event = new EventObject(type, data); for (int i = 0; i < cwal.size(); i++) { cwal.get(i).lifecycleEvent(event); } }}//观察者行为public interface LifecycleListener { public void lifecycleEvent(EventObject event);}//具体的观察者public class ObserverSubject implements LifecycleListener { @Override public void lifecycleEvent(EventObject event) { System.out.println(event.getType() + "=" + event.getData()); }}public class Client { public static void main(String[] args) { LifecycleSubject lifecycleSubject = new LifecycleSubject(); lifecycleSubject.addLifecycleListener(new ObserverSubject()); lifecycleSubject.fireLifecycleEvent("start", "how are you"); }}
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- win10输入法问题 中英文切换切不出来
- JSTL —— <c:><fmt:><fn:> 标签库
- 将任意数转换成二进制
- IE get请求传参中文乱码
- python urllib爬取网页编码问题
- 观察者模式
- 多位数乘一位数
- NSDataDetector,字符串中检测URL
- 《深入分析Java web技术内幕》笔记
- struts类型自动转换
- Codeforces 236B Easy Number Challenge 【因子和】
- 单元测试之OCUnit
- 机器学习算法----贝叶斯网络
- 将DataGridview中的数据存入数据库