
基于QQ好友关注功能的观察者模式源码解析
下载需积分: 10 | 10KB |
更新于2025-02-19
| 128 浏览量 | 举报
收藏
观察者模式是一种设计模式,用于建立一种对象与对象之间的依赖关系,当一个对象发生变化时,其它依赖该对象的对象都会收到通知,并自动更新。在编程领域,这种模式常用于实现事件处理系统,UI组件间的通信,以及实现软件系统中的松耦合。
在Java编程语言中,观察者模式主要涉及到三个角色:Subject(被观察者),Observer(观察者),以及具体实现的ConcreteSubject(具体被观察者)和ConcreteObserver(具体观察者)。被观察者维护一个观察者列表,在其状态改变时通知这些观察者。
下面通过一个用QQ关注好友来实现观察者模式的示例,来详细说明观察者模式相关知识点:
1. 定义被观察者接口(Subject):被观察者需要有一个注册观察者、移除观察者以及通知观察者的方法。
```java
public interface Subject {
void registerObserver(Observer o);
void removeObserver(Observer o);
void notifyObservers();
}
```
2. 实现被观察者接口(ConcreteSubject):具体被观察者类,比如QQ用户的动态更新,在更新自己的状态时,通知所有已注册的观察者(关注者)。
```java
public class QQUser implements Subject {
private List<Observer> observers;
private String status;
public QQUser() {
observers = new ArrayList<>();
status = "";
}
@Override
public void registerObserver(Observer o) {
observers.add(o);
}
@Override
public void removeObserver(Observer o) {
int i = observers.indexOf(o);
if (i >= 0) {
observers.remove(i);
}
}
@Override
public void notifyObservers() {
for (Observer o : observers) {
o.update(this.status);
}
}
public void setStatus(String status) {
this.status = status;
notifyObservers();
}
}
```
3. 定义观察者接口(Observer):观察者需要有一个更新的方法,当被观察者状态改变时,该方法会被调用。
```java
public interface Observer {
void update(String status);
}
```
4. 实现观察者接口(ConcreteObserver):具体观察者类,比如QQ好友,它需要实现更新方法以获取被观察者的最新状态。
```java
public class QQFriend implements Observer {
private String name;
public QQFriend(String name) {
this.name = name;
}
@Override
public void update(String status) {
System.out.println(name + " 观察到了 " + status);
}
}
```
5. 客户端代码(Client):客户端代码通过创建具体被观察者和具体观察者对象,并将观察者注册到被观察者中,模拟好友间关注与状态更新的过程。
```java
public class Client {
public static void main(String[] args) {
QQUser user = new QQUser();
Observer friend1 = new QQFriend("张三");
Observer friend2 = new QQFriend("李四");
user.registerObserver(friend1);
user.registerObserver(friend2);
user.setStatus("在听歌");
// 输出: 张三 观察到了 在听歌
// 输出: 李四 观察到了 在听歌
user.removeObserver(friend1);
user.setStatus("在学习");
// 输出: 李四 观察到了 在学习
}
}
```
以上代码演示了一个简单的观察者模式应用场景,在这个例子中,QQ用户的动态更新可以看作是被观察者的状态变化。QQ好友作为观察者,他们关注QQ用户并获取更新的状态信息。
观察者模式的优点是支持简单的广播通信,当被观察者的状态变化时,所有注册的观察者都可以得到通知,这适用于多个观察者对象同时关注一个被观察者对象的场景。其缺点是如果被观察者有过多的观察者,通知将变得很消耗资源,并且可能导致系统性能下降,因为每次状态变化都需要通知所有观察者。
通过实现观察者模式,可以实现解耦合和对象间的低依赖。它是一种被广泛使用的模式,在很多Java框架和库中都有应用,比如Spring事件机制、Android的事件处理系统等。
相关推荐

















iverson1996
- 粉丝: 2
最新资源
- jQuery中文版API文档及常用插件合集
- 可运行的网上书店完整源代码含数据库与JSP文件
- PHP 5.2.3压缩包包含运行环境及配置说明
- Realtek RTL8187 USB无线网卡最新驱动支持多系统
- 上海书画院ASP网站系统:适用于画室与培训机构的网站建设方案
- 基于ASP开发的聊天室系统实现在线交流功能
- CAD图块与填充图案大全资源包
- DedeAMPZForDebug 环境与程序详解
- VC6.0实现行号显示的方法与插件
- 微软学术论文下载工具使用指南与资源汇总
- JavaScript实现新浪微博微博数文字放大动画效果
- 基于VC++与MFC的端口扫描程序源码实现
- HTML5课堂案例包下载与浏览器兼容性说明
- MD5文件转换工具MD5File命令行实用程序解析
- Apache Log4j 1.2.15 日志框架压缩包解析
- 2011届人物档案管理系统设计与源码实现
- Android HTTPS双向验证实现与配置指南
- gh0st2.0完整可编译版本下载及说明
- 轻松进销存7.3绿色免安装版,助力中小企业高效管理
- Java2类库详解与应用
- Visual LISP与API高效应用程序开发指南
- Java设计模式详解:从GOF到Java实践
- 基于TCP协议的C#局域网即时通信程序设计与实现
- WinForms窗体间传值的三种实现方法详解