Observer Pattern 观察者模式
来源:互联网 发布:openwrt网络尖兵 编辑:程序博客网 时间:2024/06/05 11:44
Publisher, Subject
Subscriber, Observer
Observer Pattern: defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically.
观察者模式定义Subject抽象接口和Observer抽象接口。
public interface Subject{ registerObserver(); removeObserver(); notifyObserver();}
public interface Observer { update();}
Strive for loosely coupled designs between objects that interact.
Loosely coupled designed allow us to build flexible OO systems that can handle change because they minimize the interdependency between objects.
对象之间低耦合。
Pull mode: Subject自己作为参数传给Observer,Observer调用Subject的getters来获取值。Observer可以选则获取哪些值。
Push mode: Subject把值传给Observer。Observer可以选用哪些值。
Java built-in Observer Pattern
1. You should not depend on a specific notification order.
2. Observable is a class.
extends Observable;1. addObserver();2. deleteObserver();3. notifyObserver();4. setChanged();5. clearChanged();
public interface Observer { update(Observable o, Object arg);}
当你能extends Observable时,可以使用内建的Observer Pattern。否则要用写interface的方式。
观察者模式主要用来解除一个抽象模型的紧耦合,当一个抽象模型的有两个方面,其中一个方面(通常是多的那一方)依赖于另一个方面(通常是少的那一方)的变化,这时,我们应用观察者模式,将多的一方定义为订阅者,少的一方定义为发布者。(1)如果一个被观察者对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
(2)如果在被观察者之间有循环依赖的话,被观察者会触发它们之间进行循环调用,导致系统崩溃。在使用观察考模式时要特别注意这一点。
应用:Newspaper,GUI,传感器- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern
- Observer Pattern(观察者模式)
- Observer Pattern(观察者模式)
- 观察者模式(Observer Pattern)
- 观察者模式 ObServer Pattern
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- 观察者模式(Observer pattern)
- 观察者模式【Observer Pattern】
- 观察者模式(Observer Pattern)
- 观察者模式(Observer Pattern)
- Observer Pattern 观察者模式
- 观察者模式(Observer pattern)
- java中FileOutputStream和FileInputStream类用法(总结的挺好)
- Python基础之变量类型
- poj 2513 Colored Sticks Trie树
- PHP开发之使用CodeIgniter搭建一个简单的项目
- Adobe Photoshop
- Observer Pattern 观察者模式
- UVa 10795 A Diffenent Task 新汉诺塔问题
- 微信公众号demo
- 用pngcrush反编译ios app 资源文件
- NETBEANS——HTML5(PHP) + SCSS(with RUBY) 环境的配置过程
- Decorator Pattern 装饰者模式
- MAC 命令
- 《编程导论(Java)·4.1数据抽象的含义》
- 1 用户及用户组、文件夹管理