File tree Expand file tree Collapse file tree 5 files changed +117
-0
lines changed
src/com/blankj/custom/desingn_pattern/observerable Expand file tree Collapse file tree 5 files changed +117
-0
lines changed Original file line number Diff line number Diff line change
1
+ package com .blankj .custom .desingn_pattern .observerable ;
2
+
3
+ /***
4
+ * 抽象观察者
5
+ * 定义了一个update()方法,当被观察者调用notifyObservers()方法时,观察者的update()方法会被回调。
6
+ * @author jstao
7
+ *
8
+ */
9
+ public interface Observer {
10
+ void update (String message );
11
+ }
Original file line number Diff line number Diff line change
1
+ package com .blankj .custom .desingn_pattern .observerable ;
2
+
3
+ /***
4
+ * 抽象被观察者接口
5
+ * 声明了添加、删除、通知观察者方法
6
+ * @author jstao
7
+ *
8
+ */
9
+ public interface Observerable {
10
+
11
+ void registerObserver (Observer o );
12
+ void removeObserver (Observer o );
13
+ void notifyObserver ();
14
+
15
+ }
Original file line number Diff line number Diff line change
1
+ package com .blankj .custom .desingn_pattern .observerable ;
2
+
3
+ public class Test {
4
+
5
+ public static void main (String [] args ) {
6
+ WechatServer server = new WechatServer ();
7
+
8
+ Observer userZhang = new User ("ZhangSan" );
9
+ Observer userLi = new User ("LiSi" );
10
+ Observer userWang = new User ("WangWu" );
11
+
12
+ server .registerObserver (userZhang );
13
+ server .registerObserver (userLi );
14
+ server .registerObserver (userWang );
15
+ server .setInfomation ("PHP是世界上最好用的语言!" );
16
+
17
+ System .out .println ("----------------------------------------------" );
18
+ server .removeObserver (userZhang );
19
+ server .setInfomation ("JAVA是世界上最好用的语言!" );
20
+
21
+ }
22
+ }
Original file line number Diff line number Diff line change
1
+ package com .blankj .custom .desingn_pattern .observerable ;
2
+
3
+ public class User implements Observer {
4
+ private String name ;
5
+ private String message ;
6
+
7
+ public User (String name ) {
8
+ this .name = name ;
9
+ }
10
+
11
+ @ Override
12
+ public void update (String message ) {
13
+ this .message = message ;
14
+ read ();
15
+ }
16
+
17
+ public void read () {
18
+ System .out .println (name + " 收到推送消息: " + message );
19
+ }
20
+ }
Original file line number Diff line number Diff line change
1
+ package com .blankj .custom .desingn_pattern .observerable ;
2
+
3
+ import java .util .ArrayList ;
4
+ import java .util .List ;
5
+
6
+ /**
7
+ * 被观察者,也就是微信公众号服务
8
+ * 实现了Observerable接口,对Observerable接口的三个方法进行了具体实现
9
+ *
10
+ * @author jstao
11
+ */
12
+ public class WechatServer implements Observerable {
13
+
14
+ //注意到这个List集合的泛型参数为Observer接口,设计原则:面向接口编程而不是面向实现编程
15
+ private List <Observer > list ;
16
+ private String message ;
17
+
18
+ public WechatServer () {
19
+ list = new ArrayList <Observer >();
20
+ }
21
+
22
+ @ Override
23
+ public void registerObserver (Observer o ) {
24
+ list .add (o );
25
+ }
26
+
27
+ @ Override
28
+ public void removeObserver (Observer o ) {
29
+ if (!list .isEmpty ())
30
+ list .remove (o );
31
+ }
32
+
33
+ //遍历
34
+ @ Override
35
+ public void notifyObserver () {
36
+ for (int i = 0 ; i < list .size (); i ++) {
37
+ Observer oserver = list .get (i );
38
+ oserver .update (message );
39
+ }
40
+ }
41
+
42
+ public void setInfomation (String s ) {
43
+ this .message = s ;
44
+ System .out .println ("微信服务更新消息: " + s );
45
+ //消息更新,通知所有观察者
46
+ notifyObserver ();
47
+ }
48
+
49
+ }
You can’t perform that action at this time.
0 commit comments