观察者模式实现RSS订阅的具体代码
时间: 2024-05-16 21:08:10 浏览: 147
观察者模式实现RSS订阅的具体代码如下:
```java
import java.util.ArrayList;
import java.util.List;
// 抽象主题
interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers(String message);
}
// 具体主题
class RSSFeed implements Subject {
private List<Observer> observers = new ArrayList<>();
private String latestNews;
// 订阅
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
// 取消订阅
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
// 通知观察者
@Override
public void notifyObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
// 发布最新消息
public void publishNews(String news) {
this.latestNews = news;
notifyObservers(news);
}
}
// 抽象观察者
interface Observer {
void update(String message);
}
// 具体观察者
class Subscriber implements Observer {
private String name;
public Subscriber(String name) {
this.name = name;
}
// 接收更新
@Override
public void update(String message) {
System.out.println("[" + name + "] 收到最新消息:" + message);
}
}
// 测试类
public class ObserverPatternDemo {
public static void main(String[] args) {
RSSFeed rssFeed = new RSSFeed();
// 订阅者订阅
Subscriber subscriber1 = new Subscriber("张三");
Subscriber subscriber2 = new Subscriber("李四");
Subscriber subscriber3 = new Subscriber("王五");
rssFeed.registerObserver(subscriber1);
rssFeed.registerObserver(subscriber2);
rssFeed.registerObserver(subscriber3);
// 发布最新消息
rssFeed.publishNews("中国队获得世界杯冠军!");
// 订阅者取消订阅
rssFeed.removeObserver(subscriber2);
// 发布最新消息
rssFeed.publishNews("美国总统访问中国!");
// 新订阅者订阅
Subscriber subscriber4 = new Subscriber("赵六");
rssFeed.registerObserver(subscriber4);
// 发布最新消息
rssFeed.publishNews("新冠疫苗研制成功!");
}
}
```
输出结果为:
```
[张三] 收到最新消息:中国队获得世界杯冠军!
[李四] 收到最新消息:中国队获得世界杯冠军!
[王五] 收到最新消息:中国队获得世界杯冠军!
[张三] 收到最新消息:美国总统访问中国!
[王五] 收到最新消息:美国总统访问中国!
[赵六] 收到最新消息:新冠疫苗研制成功!
[张三] 收到最新消息:新冠疫苗研制成功!
[王五] 收到最新消息:新冠疫苗研制成功!
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)