程序設計模式之----Observer模式
Observer模式也稱為觀察者模式,
觀察者模式是java已經實現的模式,我們只要利用java.util.Obserable類和java.util.Observer接口就可以實現觀察者模式
實現過程:
被觀察者必須繼承Observable,一旦事件被觸發,調用notifyObservers通知觀察者
觀察者必須實現Observer接口,實現update方法,完成事件處理
舉個經典的例子....貓叫,老鼠跑.人驚醒....
代碼:
1
package javamodel.observer;
2
3
import java.util.Observable;
4
import java.util.Observer;
5
6
/**
7
* 貓叫,老鼠跑,主人被驚醒,用代碼實現這個連鎖反應 。
8
* @author Administrator
9
*
10
*/
11
12
public class TestObserver {
13
14
public static void main(String[] args){
15
Cat c=new Cat();
16
Observer o1=new Mouse();
17
Observer o2=new Man();
18
c.addObserver(o1);
19
Mouse oo1=(Mouse)o1;//向下轉型
20
oo1.addObserver(o2);
21
c.CatSay();
22
}
23
24
}
25
26
class Cat extends Observable{//貓被老鼠觀察,貓是被觀察者
27
28
public void CatSay(){
29
System.out.println("貓叫了");
30
this.setChanged();
31
this.notifyObservers();
32
}
33
}
34
35
class Mouse extends Observable implements Observer{//老鼠觀察貓,貓是觀察者,對于人,老鼠是被觀察者
36
37
public void update(Observable arg0, Object arg1) {
38
// TODO Auto-generated method stub
39
System.out.println("貓叫了,老鼠跑了");
40
this.setChanged();
41
this.notifyObservers();
42
}
43
44
}
45
46
class Man implements Observer{//人觀察老鼠,人是觀察者
47
48
public void update(Observable arg0, Object arg1) {
49
// TODO Auto-generated method stub
50
System.out.println("老鼠跑了,人驚醒了");
51
}
52
}
53
54

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

總結, 觀察者模式的應用場景:
1、 對一個對象狀態的更新,需要其他對象同步更新,而且其他對象的數量動態可變。
2、 對象僅需要將自己的更新通知給其他對象而不需要知道其他對象的細節。
觀察者模式的優點:
1、 Subject和Observer之間是松偶合的,分別可以各自獨立改變。
2、 Subject在發送廣播通知的時候,無須指定具體的Observer,Observer可以自己決定是否要訂閱Subject的通知。
3、 遵守大部分GRASP原則和常用設計原則,高內聚、低偶合。
觀察者模式的缺陷:
1、 松偶合導致代碼關系不明顯,有時可能難以理解。(廢話)
2、 如果一個Subject被大量Observer訂閱的話,在廣播通知的時候可能會有效率問題。(畢竟只是簡單的遍歷)
posted on 2008-11-25 11:02 Lanny 閱讀(828) 評論(0) 編輯 收藏 所屬分類: Java