Observer Pattern 观察者模式

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();
}


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,传感器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值