Skip to content

Commit 82b20be

Browse files
author
laileon
committed
observal
1 parent 04cc0a8 commit 82b20be

File tree

5 files changed

+117
-0
lines changed

5 files changed

+117
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
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+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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+
}

0 commit comments

Comments
 (0)