file-type

基于QQ好友关注功能的观察者模式源码解析

下载需积分: 10 | 10KB | 更新于2025-02-19 | 128 浏览量 | 1 下载量 举报 收藏
download 立即下载
观察者模式是一种设计模式,用于建立一种对象与对象之间的依赖关系,当一个对象发生变化时,其它依赖该对象的对象都会收到通知,并自动更新。在编程领域,这种模式常用于实现事件处理系统,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
上传资源 快速赚钱