观察者模式

1 概述

观察者模式,也叫发布订阅模式。
主要用于 1 : N 的通知中。当一个对象(目标对象 Subject 或者 Objservable )的状态变化时,他需要及时告知一系列的对象(观察者对象,Observer),令他们做出响应。

2 结构图

在这里插入图片描述

3 demo

3.1 demo1

public interface Subject {// 抽象事件源
    public void registerObserve(Observer observer);
    public void removeObserve(Observer observer);
    public void notifyObserve();
}
public interface Observer {// 抽象观察者
    public void update(String message);
}
public class ConcreteSubject implements Subject {
    private List<Observer> observerList;//观察者
    private String message;//观察的事件
    public ConcreteSubject(){
        observerList = new ArrayList<>();
    }
    @Override
    public void registerObserve(Observer observer) {
        observerList.add(observer);
    }
    @Override
    public void removeObserve(Observer observer) {
        observerList.remove(observer);
    }
    @Override
    public void notifyObserve() {//采用推送的形式通知观察者
        for (Observer o:observerList){
            o.update(message);
        }
    }
    public void setInfomation(String s){
        this.message=s;
        System.out.println("发布更新消息"+s);
        notifyObserve();
    }
}
public class ConcreteObserver implements Observer {//具体的观察者
    private String message;// 观察的事件
    private String name;
    public ConcreteObserver(String name){
        this.name=name;
    }
    @Override
    public void update(String message) {
      this.message= message;
      read();
    }
    public void read(){
        System.out.println(name+"收到:"+message);
    }
}

3.2 demo2

<1> 我们定义被观察对象
<2> 给出监听接口,具体的观察者都去实现这个接口,具体的观察者复写接口的方法,当被观察对象的状态发生变化,做出响应
<3> 定义具体的观察者
<4> 定义事件类Event,将观察者状态的改变封装成Event类,不同的状态对应不同的事件。
<5> 可以在Event中采用推送的形式使所有观察者都给出响应
观察者模式demo2

5 应用场景

  • 聊天室程序的,服务器转发给所有客户端
  • 网络游戏(多人联机对战)场景中,服务器将客户端的状态进行分发
  • 邮件订阅
  • Servlet 中,监听器Listener的实现
  • Android 中,广播机制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值