1
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
package
com.juziku.pattern.observer;
/**
* 观察者,比如粉丝
* @author steven
*
*/
public
interface
Observer {
void
update(Subject subject);
}
/**
* 目标对象,作为被观察者
* @author steven
*
*/
public
interface
Subject {
/**
* 添加观察者
*/
void
addObserver(Observer observer);
/**
* 删除观察者
*/
void
deleteObserver(Observer observer);
/**
* 一旦有新消息,通知所有的粉丝(即:所有观察者)
*/
void
notifyObserver();
}
/**
* 作为被观察者
* @author steven
*
*/
public
class
Follower
implements
Subject {
private
List<Observer> observers =
new
ArrayList<Observer>();
private
String content;
@Override
public
void
addObserver(Observer observer) {
observers.add(observer);
}
@Override
public
void
deleteObserver(Observer observer) {
observers.remove(observer);
}
@Override
public
void
notifyObserver() {
for
(Observer observer: observers){
observer.update(
this
);
}
}
public
String getContent() {
return
content;
}
public
void
setContent(String content) {
this
.content = content;
//通知所有的粉丝(即:所有观察者)
this
.notifyObserver();
}
}
/**
* 粉丝,作为观察者
* @author steven
*
*/
public
class
Fans
implements
Observer {
private
String name;
@Override
public
void
update(Subject subject) {
System.out.println(name +
" 收到一条消息,消息内容为:"
+ ((Follower)subject).getContent());
}
public
void
setName(String name) {
this
.name = name;
}
}
public
class
ObserverTest {
public
static
void
main(String[] args) {
/**
* 创建一个follower,作为被观察者,一旦follower有新消息,
* 则通知所有的粉丝(即:所有观察者)
*/
Follower follower =
new
Follower();
/**
* 创建粉丝A,也就是观察者
*/
Fans fansA =
new
Fans();
fansA.setName(
"张三"
);
follower.addObserver(fansA);
/**
* 创建粉丝B
*/
Fans fansB =
new
Fans();
fansB.setName(
"李四"
);
follower.addObserver(fansB);
/**
* follower有新消息,通知所有粉丝(即:所有观察者)
*/
follower.setContent(
"今天天气很好啊。"
);
}
}
|
1
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
import
java.util.Observable;
import
java.util.Observer;
/**
* 粉丝,作为观察者
* @author steven
*
*/
public
class
Fans
implements
Observer {
private
String name;
@Override
public
void
update(Observable o, Object arg) {
System.out.println(name +
" 收到一条消息,消息内容为:"
+ ((Follower)o).getContent());
}
public
void
setName(String name) {
this
.name = name;
}
}
import
java.util.Observable;
/**
* 作为被观察者
* @author steven
*
*/
public
class
Follower
extends
Observable {
private
String content;
public
String getContent() {
return
content;
}
public
void
setContent(String content) {
this
.content = content;
//注意,在用java中的Observer模式的时候,这句不能少
this
.setChanged();
//通知所有的粉丝(即:所有观察者)
this
.notifyObservers();
}
}
public
class
ObserverTest {
public
static
void
main(String[] args) {
/**
* 创建一个follower,作为被观察者,一旦follower有新消息,
* 则通知所有的粉丝(即:所有观察者)
*/
Follower follower =
new
Follower();
/**
* 创建粉丝A,也就是观察者
*/
Fans fansA =
new
Fans();
fansA.setName(
"张三"
);
follower.addObserver(fansA);
/**
* 创建粉丝B
*/
Fans fansB =
new
Fans();
fansB.setName(
"李四"
);
follower.addObserver(fansB);
/**
* follower有新消息,通知所有粉丝(即:所有观察者)
*/
follower.setContent(
"今天天气很好啊。"
);
}
}
|