一.觀察者模式:
(1).觀察者模式定義:定義了一種一對多的依賴關係,讓多個觀察者監聽某個主體物件。當主題物件發生改變時,則會通知所有的觀察者物件,讓它們自動更新自己。
(2).觀察者模式的組成:
a).具體主題角色:在具體主題角色內部發生變化時,給所有註冊過的觀察者發出通知。(通常使用乙個類實現)
b).抽象主題角色:把所有觀察者物件的引用儲存的在乙個集合中,每個抽象主題角色都可以有任意個觀察者,一般用抽象類或介面實現。
c).抽象觀察者角色:為具體的觀察者定義乙個介面,在得到主題通知時更新自己。
d).具體觀察者角色:實現抽象觀察者角色所要求的更新介面。
二.實現自己的觀察者模式:
1).抽象主題角色:
//被觀察的,就是抽象主題角色
public inte***ce watched
2).抽象觀察者角色:
//觀察的,就是抽象觀察者角色
public inte***ce watcher
3).具體主題角色:
//具體主題角色
public class concretewatched implements watched
@override
public void removewatcher(watcher watcher)
@override
public void notifywatchers(string str)
}}
4).具體觀察者角色:
//具體觀察者角色
public class concretewatcher implements watcher
}
5).測試:
public class index
}
列印:哈哈
哈哈哈哈
三.jdk對觀察者的內建支援:
1).在jdk中提供了observable類和observer介面:
observable類用於建立可以觀測到你的程式中其他部分的子類。當這種子類發生變化時通知其觀察者。觀察類必須實現了observer介面的update()方法。
2).必須呼叫的方法:
乙個被觀察的物件發生改變時必須呼叫setchandeg()方法,在通知觀察者時必須呼叫notifyobservers()方法。如果在通知觀察者時未呼叫setchandeg()方法則就不會有任何的響應。
3).notifyobservers()方法有兩種形式:
乙個是帶引數的乙個是不帶引數的。帶引數的方法,其引數就是傳給update()的第二個引數。
簡單實現:
//被觀察者
class beingwatched extends observable }
//觀察者物件一
class watcher1 implements observer
}//觀察者物件二
class watcher2 implements observer
}public class observabletest
}
列印:
我是觀察者:watcher2
我是觀察者:watcher1
四.觀察者的適用:
1). 對乙個物件狀態的更新,需要其他物件同步更新,而且其他物件的數量動態可變。
2). 物件僅需要將自己的更新通知給其他物件而不需要知道其他物件的細節。
java觀察者模式
簡單地說,觀察者模式定義了乙個一對多的依賴關係,讓乙個或多個觀察者物件監察乙個主題物件。這樣乙個主題物件在狀態上的變化能夠通知所有的依賴於此物件的那些觀察者物件,使這些觀察者物件能夠自動更新。不多說了,直接給出實現 例1 對某個事件只有乙個訂閱者的例子 author yongxing.shao pu...
觀察者模式java
根據headfirst做出實現如下 主題,觀察者,顯示三個介面。public inte ce observer public inte ce subject public inte ce displayelement 氣象資料實現主題介面 public class weather implement...
JAVA 觀察者模式
實現觀察者模式涉及到乙個類和乙個介面 observable類和observer介面 被觀察的類需要繼承observable類,在該類中的常用方法有 public voidaddobserver observer o 增加乙個觀察者觀察自己 public voiddeleteobserver obse...