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+
* 被观察者接口 / 声明了添加、删除、通知观察者方法
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy