File tree Expand file tree Collapse file tree 5 files changed +148
-0
lines changed
java-des/src/com/java/design/observer Expand file tree Collapse file tree 5 files changed +148
-0
lines changed Original file line number Diff line number Diff line change
1
+ package com .java .design .observer ;
2
+
3
+ /**
4
+ * 观察者接口
5
+ *
6
+ * @author Administrator
7
+ *
8
+ */
9
+ public interface Observer {
10
+
11
+ void update (String message );
12
+ }
Original file line number Diff line number Diff line change
1
+ package com .java .design .observer ;
2
+
3
+ /**
4
+ * 观察者模式 -----> 在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。
5
+ *
6
+ * 其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息
7
+ *
8
+ * @author Administrator
9
+ *
10
+ */
11
+ public class ObserverPattern {
12
+
13
+ public static void main (String [] args ) {
14
+
15
+ ObserverServer observerServer = new ObserverServer ();
16
+ Observer observerA = new User ("A" );
17
+ Observer observerB = new User ("B" );
18
+ Observer observerC = new User ("C" );
19
+
20
+ observerServer .add (observerA );
21
+ observerServer .add (observerB );
22
+ observerServer .add (observerC );
23
+ observerServer .setInfomation ("PHP是世界上最好的语言 ..." );
24
+
25
+ System .out .println ("------------------------------" );
26
+
27
+ observerServer .remove (observerB );
28
+ observerServer .setInfomation ("JAVA是世界上最好的语言 ..." );
29
+
30
+ }
31
+
32
+ }
Original file line number Diff line number Diff line change
1
+ package com .java .design .observer ;
2
+
3
+ import java .util .ArrayList ;
4
+ import java .util .List ;
5
+
6
+ /**
7
+ * 被观察者服务
8
+ *
9
+ * @author Administrator
10
+ *
11
+ */
12
+ public class ObserverServer implements Observerable {
13
+
14
+ private List <Observer > observers ;
15
+ private String message ;
16
+
17
+ public ObserverServer () {
18
+ observers = new ArrayList <Observer >();
19
+ }
20
+
21
+ @ Override
22
+ public void add (Observer observer ) {
23
+
24
+ observers .add (observer );
25
+ }
26
+
27
+ @ Override
28
+ public void remove (Observer observer ) {
29
+
30
+ if (!observers .isEmpty ()) {
31
+ observers .remove (observer );
32
+ }
33
+ }
34
+
35
+ @ Override
36
+ public void notifyObs () {
37
+
38
+ for (int i = 0 ; i < observers .size (); i ++) {
39
+ Observer obs = observers .get (i );
40
+ obs .update (message );
41
+ }
42
+ }
43
+
44
+ public void setInfomation (String message ) {
45
+ this .message = message ;
46
+ System .out .println ("服务更新消息:" + message );
47
+ notifyObs ();
48
+ }
49
+
50
+ }
Original file line number Diff line number Diff line change
1
+ package com .java .design .observer ;
2
+
3
+ /**
4
+ * 被观察者接
6D40
/ 声明了添加、删除、通知观察者方法
5
+ *
6
+ * @author Administrator
7
+ *
8
+ */
9
+ public interface Observerable {
10
+
11
+ /**
12
+ * 添加观察者
13
+ *
14
+ * @param observer
15
+ */
16
+ void add (Observer observer );
17
+
18
+ /**
19
+ * 删除观察者
20
+ *
21
+ * @param observer
22
+ */
23
+ void remove (Observer observer );
24
+
25
+ /**
26
+ * 通知观察者
27
+ *
28
+ */
29
+ void notifyObs ();
30
+
31
+ }
Original file line number Diff line number Diff line change
1
+ package com .java .design .observer ;
2
+
3
+ public class User implements Observer {
4
+
5
+ private String name ;
6
+ private String message ;
7
+
8
+ public User (String name ) {
9
+ this .name = name ;
10
+ }
11
+
12
+ @ Override
13
+ public void update (String message ) {
14
+
15
+ this .message = message ;
16
+ read ();
17
+ }
18
+
19
+ public void read () {
20
+
21
+ System .out .println (name + "收到推送消息:" + message );
22
+ }
23
+ }
You can’t perform that action at this time.
0 commit comments