适用于广播场景机制 :
• 聊天室程序的创建。服务器创建好后,A,B,C三个客户端连上来公开聊天。A向服务器发送数据,服务器端聊天数据改变。我们希望将这些聊天数据分别发给其他在线的客户。也就是说,每个客户端需要更新服务器端得数据。
• 网站上,很多人订阅了”java主题”的新闻。当有这个主题新闻时,就会将这些新闻发给所有订阅的人。
• 玩CS游戏时,服务器需要将每个人的方位变化发给所有的客户。
我们可以把多个订阅者、客户称之为观察者; 需要同步给多个订阅者的数据封装到对象中,称之为目标。
核心:观察者模式主要用于1:N的通知。当一个对象(目标对象Subject,消息发布)的状态变化时,他需要及时告知一系列对象(观察者对象Observer,消息订阅),令他们做出响,通知观察者的方式主要是推和拉:
• 推:每次都会把通知以广播方式发送给所有观察者,所有观察者只能被动接收。
• 拉:观察者只要直到有情况即可。至于什么时候获取内容,获取什么内容,都可以自主决定。
代码实现:
1 | public interface Observer { |
1 | public class Subject { |
1 | public class test { |
• 开发中常见的场景:
- 聊天室程序的,服务器转发给所有客户端
- 网络游戏(多人联机对战)场景中,服务器将客户端的状态进行分发
- 邮件订阅
- Servlet中,监听器的实现
- Android中,广播机制
- JDK的AWT中事件处理模型,基于观察者模式的委派事件模型(Delegation Event Model)
- 事件源—————-目标对象
- 事件监听器————观察者
- 京东商城中,群发某商品打折信息