8000 观察者模式 · Folgerjun/DesignPatterns-Java@4fa3d0f · GitHub
[go: up one dir, main page]

Skip to content

Commit 4fa3d0f

Browse files
authored
观察者模式
观察者模式
1 parent faba2e2 commit 4fa3d0f

File tree

5 files changed

+148
-0
lines changed

5 files changed

+148
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
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+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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+
}

0 commit comments

Comments
 (0)
0