介绍
shiyanlou:在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实时事件处理系统。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。
角色
角色 | 说明 |
---|---|
Subject | 抽象目标类,一般至少提供三个接口: 添附(attach) 解附(detach) 通知(notify) |
ConcreteSubject | 具体目标,提供了观察者欲追踪的状态,也可设置目标状态 |
Observer | 抽象观察者,定义观察者的更新操作接口 |
ConcreteObserver | 具体观察者,实现抽象观察者的接口,做出自己的更新操作 |
角色示例
类名 | 担任角色 | 说明 |
---|---|---|
OfficialAccount | Subject | 微信公众号,提供三个接口: 关注(follow) 取关(unFollow) 推送(send) |
MyOfficialAccount | ConcreteSubject | 我的微信公众号 |
User | Observer | 用户 |
Developer | ConcreteObserver | 开发者 |
UML类图
代码
- 创建 User.java,代码如下
1 | abstract class User { |
- 创建 Developer.java,代码如下
1 | public class Developer extends User { |
- 创建 OfficialAccount.java,代码如下
1 | import java.util.ArrayList; |
- 创建 MyOfficialAccount.java,代码如下
1 | public class MyOfficialAccount extends OfficialAccount{ |
- 创建 OfficialAccountTest.java,代码如下
1 | public class OfficialAccountTest { |
执行
1 | $ javac OfficialAccountTest.java |