Observer Pattern 观察者模式
2015-07-04 03:22
169 查看
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抽象接口。
Design principle:
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时,可以使用内建的Observer Pattern。否则要用写interface的方式。
观察者模式主要用来解除一个抽象模型的紧耦合,当一个抽象模型的有两个方面,其中一个方面(通常是多的那一方)依赖于另一个方面(通常是少的那一方)的变化,这时,我们应用观察者模式,将多的一方定义为订阅者,少的一方定义为发布者。
(1)如果一个被观察者对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
(2)如果在被观察者之间有循环依赖的话,被观察者会触发它们之间进行循环调用,导致系统崩溃。在使用观察考模式时要特别注意这一点。
应用:Newspaper,GUI,传感器
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(); }
Design principle:
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,传感器
相关文章推荐
- Adobe Photoshop
- PHP开发之使用CodeIgniter搭建一个简单的项目
- 网络安全靠什么?网络管理员的重要定义
- poj 2513 Colored Sticks Trie树
- java中FileOutputStream和FileInputStream类用法(总结的挺好)
- vim中输入tab符
- 博客创建
- httpclient请求方式下的泛型json转换问题
- Cocos2d-x 的内存管理
- 人工智能领域中声源定位的研究与发展------第二章 声源定位系统 (6)
- C#代码读写XML
- maven踩坑
- 1004--Java集合--Set 接口
- 数据结构基础温故-2.栈
- 快讯:阳光动力2号胜利抵达美国夏威夷
- 看了奇点大学的总决赛相关的视频,一些感悟
- UVa 11384 Help is needed for Dexter 正整数序列
- int ,long , long long类型的范围
- java实现下雪雪花飘落并堆积效果
- 【leetcode】Distinct Subsequences