设计模式--观察者模式Observer
来源:互联网 发布:树熊网络登录 编辑:程序博客网 时间:2024/06/05 10:01
定义:
定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
一:Subject
public interface Subject {void registerObserver(Observer observer);void removerObserver(Observer observer);void notifyObersers();}public class A implements Subject {private ArrayList<Observer> observer;public A() {observer = new ArrayList<Observer>();}@Overridepublic void registerObserver(Observer observer) {// TODO Auto-generated method stubthis.observer.add(observer);}@Overridepublic void removerObserver(Observer observer) {// TODO Auto-generated method stubint index = this.observer.indexOf(observer);if (index >= 0)this.observer.remove(observer);}@Overridepublic void notifyObersers() {// TODO Auto-generated method stubfor (int i = 0; i < observer.size(); i++) {observer.get(i).update(temperature, humidity, pressure);}}public void measurementChanged() {notifyObersers();}}多:Observer
public interface Observer{ public void update(); }public class B implements Observer { public void update(){}}
类图
实现:
见链接
使用Java内置的观察者模式:
java/util/Observable 类
addObserver()
deleteObserver()
notifyObservers()
setChanged()
java/util/Observer 接口
update()
public class A extends Observable
public class B implements Observer {
public void update(){}
}
ps
OO原则
封装变化 : 在观察者模式中,会改变的是Subject的状态,以及观察者的数目和类型。
多用组合,少用继承
针对接口编程,不针对实现编程 :Subject和Observer都使用接口,Observer利用Subject的接口向Subject注册,而Subject利用Observer接口通知Observer。
**为交互对象之间的松耦合设计而努力
要点:
观察者模式定义了对象之间一对多的关系。
主题用一个共同的接口来更新观察者。
观察者和可观察者之间用松耦合方式结合(loosecoupling),可观察者不知道观察者的细节,只知道观察者实现了观察者接口。
Swing大量使用观察者模式,许多GUI框架也是如此。
JavaBeans 、RMI
0 0
- 观察者设计模式Observer
- 观察者设计模式(observer)
- observer(观察者设计模式)
- Observer(观察者)设计模式
- [设计模式]观察者模式, Observer
- 设计模式--观察者模式(Observer)
- 设计模式-观察者模式(observer)
- [设计模式]Observer观察者模式
- [设计模式]观察者模式(Observer)
- 设计模式-Observer(观察者模式)
- 设计模式--observer观察者模式
- 设计模式 -- Observer 观察者模式
- 设计模式--观察者模式Observer
- 设计模式:观察者(observer)模式
- 设计模式-观察者模式Observer
- 设计模式:观察者模式-observer
- 设计模式 - Observer观察者模式
- 设计模式之Observer(观察者)
- Sharepoint 2013 解决刷新 ExceBe careful. this workbook contains one or more queries that might be unsafe
- HTML5
- 实验三:顺序队列的实现
- Json数据 传递方式
- protobuf在iOS中得使用
- 设计模式--观察者模式Observer
- Linux 查看程序使用swap 分区大小
- Android中Activity四种启动模式和taskAffinity属性详解
- 无法打开物理文件 "D:\understructuredata _DAT.MDF"。操作系统错误 5:"5(拒绝访问。)"
- hdu1969 Pie
- 如何写一个web分页
- 《实战nginx》第8章-Nginx模块开发
- ie8 input 文字偏上/偏下问题
- FragmentActivity和Activity的具体区别在哪里?