- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathObserverTest.java
More file actions
Latest commit
89 lines (75 loc) · 1.64 KB
/
Copy pathObserverTest.java
File metadata and controls
89 lines (75 loc) · 1.64 KB
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
packageJavaPatternDemos;
importjava.util.ArrayList;
/**
*
* 观察者模式
*
* 被观察者和观察者,是 1对多的关系
*
* 当然,观察者对象可以由很多,被观察者对象也可以由不同类型
*
* 感觉还是很强大的,适用广
*
*
*
*
*/
publicclassObserverTest {
}
abstractclassMyObserver{
publicabstractvoidupdate();
publicabstractvoidupdate(MyObservablemyobservable_);
}
abstractclassMyObservable{
protectedArrayList<MyObserver> observers;
publicvoidaddObserver(MyObservernewOb){
observers.add(newOb);
}
publicvoidremoveObserver(MyObserverrmOb){
observers.remove(rmOb);
}
publicabstractvoidnotifyObservers();
}
/**
* 黄金用户
*/
classGoldenObserverextendsMyObserver{
privateStringname;
@Override
publicvoidupdate() {
// do something
}
publicvoidupdate(MyObservableobs){
// do shomething
}
}
/**
* 白银用户
*/
classSilverObserverextendsMyObserver{
privateStringname;
@Override
publicvoidupdate() {
// do something
}
@Override
publicvoidupdate(MyObservablemyobserverable) {
// do somthing
}
}
classObserverableUserextendsMyObservable{
privateStringname;
@Override
publicvoidnotifyObservers() {
// 灵活控制不同权限.通知内容等
for(MyObservereach: this.observers){
if(eachinstanceofGoldenObserver){
each.update(this);
}
else{
// 普通用户仅仅更新
each.update();
}
}
}
}