observer模式定義對象間的一對多的依賴(lài)關(guān)系,當一個(gè)對象的狀態(tài)發(fā)生改變時(shí), 所有依賴(lài)于它的對象都得到通知并被自動(dòng)更新。JDK里提供的observer設計模式的實(shí)現由java.util.Observable類(lèi)和java.util.Observer接口組成。從名字上可以清楚的看出兩者在Observer 設計模式中分別扮演的角色:Observer是觀(guān)察者角色,Observable是被觀(guān)察目標(subject)角色。
下面給出一個(gè)代碼示例:
package kellerdu.demo;
import java.util.*;
/**
* <p>
* 使用Observer模式的例子。
* 自己的手機號碼更改后,自己的朋友自動(dòng)得到通知。
* </p>
*
* @author not attributable
* @version 1.0
*/
public class ObserverDesignPattern extends Observable {
public ObserverDesignPattern() {
super();
//有兩個(gè)朋友
addFriend(new Friend("Tom"));
addFriend(new Friend("Jerry"));
}
public void addFriend(Friend n){
super.addObserver(n);
}
/**
* 手機號碼改變
* @param l long
*/
public void modifyPhoneNumber(final long l){
/*
*表明狀態(tài)已經(jīng)改變,不調用不會(huì )通知觀(guān)察者
*/
setChanged();
//通知其他人自己的號碼改變
notifyObservers(new Long(l));
}
class Friend implements Observer{
private String name;
/**
* @param name 朋友的姓名
*/
public Friend(String name) {
this.name=name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void update(Observable o, Object arg) {
if(arg instanceof Long){
System.out.println(name+"已經(jīng)知道你的手機號碼改為:"+arg);
}
}
}
public static void main(String[] args) {
ObserverDesignPattern op = new ObserverDesignPattern();
//更改手機號碼
System.out.println("我手機號碼更改為13516816888!");
op.modifyPhoneNumber(Long.parseLong("13516816888"));
}
}
程序運行結果:
我手機號碼更改為13516816888!
Jerry已經(jīng)知道你的手機號碼改為:13516816888
Tom已經(jīng)知道你的手機號碼改為:13516816888
聯(lián)系客服