【 應用以及剖析】之 java.util.Observer 觀察者模式實現
今晚閒著無聊,看the art of java,於是碰到了Observer,先前用過這個類,但忘記具體用法了
,寫下本文以供以後之用。
下面有個例子,先把例子的背景說清楚,某團體開會,要通知到各個與會者,並且如果會議時間有變動,要及時通知所有與會者。
要實現觀察者模式,首先要弄清兩個概念:觀察者與被觀察者。前者在本例中是開會人員,後者是專門通知會議的聯絡員。
首先開會人員要想得到通知必須實現一個介面:
開會人員
class Person implements Observer {
String name;
int changeTimes=0;//記錄本人看到的記錄更改次數
/**
*
*/
public Person(String name) {
this.name = name;
}
/*
* 本人看到了通知
*
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
*/
public void update(Observable o, Object arg) {
String first=
name + "說: 我已經看到了通知," + arg;
String other=name + "說: 我考!,都該了N次了,N>="+ changeTimes + arg;
System.out.println(changeTimes==0?first:other);
changeTimes++;
}
}
會議通知員:
class NoticeOfficer extends Observable {
/**
*
*/
public NoticeOfficer(String content) {
this.content = content;
}
//重要通知
String content;
void sendNotice(List p) {
Iterator iter = p.iterator();
while (iter.hasNext()) {
Object o = (Object) iter.next();
addObserver((Observer) o);
}
setChanged();
notifyObservers(content);
}
}
測試類:
public class Test{
public static void main(String[] args) {
NoticeOfficer officer = new NoticeOfficer("今天下午2:60 有會!");
List personList = new ArrayList();
personList.add(new Person("校長"));
personList.add(new Person("流氓"));
personList.add(new Person("程式設計師"));
personList.add(new Person("瘋子"));
officer.sendNotice(personList);
for (int i = 0; i < 10000000; i++) {
}
officer.content="會議改為3:50";
officer.sendNotice(personList);
}
}
相關文章
- 觀察者模式的實際應用模式
- 觀察者模式解析以及在Android中的實際應用模式Android
- JS原生實現觀察者模式JS模式
- JavaScript原生實現觀察者模式JavaScript模式
- 觀察者模式——RecyclerView中的應用模式View
- 設計模式 | 觀察者模式及典型應用設計模式
- javascript中的觀察者模式實現JavaScript模式
- 觀察者模式應用場景例項模式
- 觀察者模式在 Javascript 中的應用模式JavaScript
- PHP 之觀察者模式PHP模式
- 使用函式式實現觀察者模式模式函式模式
- 設計模式(python實現):觀察者模式設計模式Python
- 設計模式之觀察者模式設計模式
- 設計模式之-觀察者模式設計模式
- 設計模式之【觀察者模式】設計模式
- 原生實現的觀察者模式(Observer Model)模式Server
- PHP實現觀察者模式SplSubject SplObserver SplObjectStoragePHP模式ServerObject
- Java設計模式——觀察者模式的靈活應用Java設計模式
- Go 實現常用設計模式(五)觀察者模式Go設計模式
- Android之觀察者模式Android模式
- PHP 設計模式之觀察者模式PHP設計模式
- PHP設計模式之觀察者模式PHP設計模式
- Go 設計模式之觀察者模式Go設計模式
- 設計模式之觀察者模式(一)設計模式
- JavaScript設計模式之觀察者模式JavaScript設計模式
- PHP 設計模式之——觀察者模式PHP設計模式
- golang設計模式之觀察者模式Golang設計模式
- Java 設計模式之《觀察者模式》Java設計模式
- Java設計模式之觀察者模式Java設計模式
- iOS設計模式之觀察者模式iOS設計模式
- 設計模式系列之「觀察者模式」設計模式
- php模式設計之 觀察者模式PHP模式
- 設計模式學習-使用go實現觀察者模式設計模式Go
- 三種觀察者模式的C#實現模式C#
- 求教一個觀察者模式應用的問題模式
- 實驗 21:觀察者模式模式
- 設計模式(六)觀察者模式詳解(包含觀察者模式JDK的漏洞以及事件驅動模型)設計模式JDK事件模型
- 設計模式實戰 - 觀察者模式設計模式