1
2
3
4
5
6
7
8
9
|
public
interface
ISubject {
public
void
registerObserver(IObserver observer);
public
void
removeObserver(IObserver observer);
public
void
notifyObserver();
}
|
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
|
public
class
WeatherSubject
implements
ISubject{
//保存所有对观察者对象的引用的集合
private
ArrayList<IObserver> observersList;
private
double
tempretrue;
private
String weather;
private
int
windClass;
public
WeatherSubject(){
observersList =
new
ArrayList<IObserver>();
}
/**
* 注册观察者的实现
*/
public
void
registerObserver(IObserver observer) {
observersList.add(observer);
}
/**
* 移除观察者的实现
*/
public
void
removeObserver(IObserver observer) {
int
index = observersList.indexOf(observer);
if
(index >=
0
){
observersList.remove(index);
}
}
/**
* 更新观察者的实现
*/
public
void
notifyObserver() {
for
(
int
i=
0
;i<observersList.size();i++){
IObserver observer = observersList.get(i);
observer.update(tempretrue, weather, windClass);
}
}
/**
* 设置新数据
* @param tempretrue
* @param weather
* @param windClass
*/
public
void
setData(
int
tempretrue, String weather,
int
windClass){
this
.tempretrue = tempretrue;
this
.weather = weather;
this
.windClass = windClass;
}
}
|
1
2
3
|
public
interface
IObserver {
public
void
update(
double
temp, String wea,
int
wind);
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public
class
TodayObserver
implements
IObserver{
private
ISubject subject;
public
TodayObserver(ISubject subject){
//如果需要,具体观察者角色可以保存一个指向具体主题角色的引用
this
.subject = subject;
subject.registerObserver(
this
);
}
public
void
update(
double
temp, String wea,
int
wind) {
System.out.println(
"Today tempreture:"
+temp);
System.out.println(
"Today weather:"
+wea);
System.out.println(
"Today wind class:"
+wind);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public
class
TomorrowObserver
implements
IObserver{
private
ISubject subject;
public
TomorrowObserver(ISubject subject){
this
.subject = subject;
subject.registerObserver(
this
);
}
public
void
update(
double
temp, String wea,
int
wind) {
System.out.println(
"Tomorrow tempreture:"
+temp);
System.out.println(
"Tomorrow weather:"
+wea);
System.out.println(
"Tomorrow wind class:"
+wind);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public
class
TomorrowAfterObserver
implements
IObserver{
private
ISubject subject;
public
TomorrowAfterObserver(ISubject subject){
this
.subject = subject;
subject.registerObserver(
this
);
}
public
void
update(
double
temp, String wea,
int
wind) {
System.out.println(
"The day after tomorrow tempreture:"
+temp);
System.out.println(
"The day after tomorrow weather:"
+wea);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
|
public
class
MainTest {
public
static
void
main(String[] args) {
WeatherSubject subject =
new
WeatherSubject();
//观察者的分别注册
TodayObserver today =
new
TodayObserver(subject);
TomorrowObserver tomorrow =
new
TomorrowObserver(subject);
TomorrowAfterObserver tomorrowAfter =
new
TomorrowAfterObserver(subject);
//被观察者的全部通知更新
subject.notifyObserver();
}
}
|