简述-观察者模式

在这里插入图片描述
你不知道哪天妈妈会让你做作业,然后你就一直等待,直到有一天老师让你做作业了,通知了你,你就拿笔开始了你鬼画桃符。这就是一个观察者模式的体现。(最讨厌写作业)

接下来我们用代码来解决这个问题。

UML

在这里插入图片描述

使用场景

  • 关联行为场景,关联行为可拆分,非聚合关系

  • 事件多级触发场景

  • 跨系统消息交换,如消息队列、事件总线的处理机制

  • 先创建Mather,继承子Observable(java中携带有的被观察者类,比较方便,使用它来介绍)

事例

/**
 * 被观察者
 */
public class Mather extends Observable {

    public Mather() {
    }

    /**
     * 方法:通知观察者做作业了
     */
    public void notify2XiaoMing() {
        //设置改变了,然后再通知观察者们
        setChanged();
        notifyObservers("该做作业了");
    }
}
  • 再创建小明
/**
 * 小明
 */
public class XiaoMing implements Observer {
    public XiaoMing() {
    }

    /***
     * 观察者接口回调,有改变的时候会回调
     * @param o 被观察者对象,一个观察者可以注册多个被观察者,用这个区分
     * @param arg 消息
     */
    @Override
    public void update(Observable o, Object arg) {
        System.out.println(o + ":" + arg);
    }
}
  • 测试类
public class ObserTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        //创建观察者
        XiaoMing xiaoMing = new XiaoMing();
        //创建被观察者并添加到观察者中
        //利用Observable自带的添加方法,内部是添加到一个列表中
        father.addObserver(xiaoMing);

        //通知
        father.notify2XiaoMing();
    }
}

总结:

观察者大致流程就是:

  1. 观察者注册到被观察者中
  2. 被观察者有变化的时候,使用注册引用来通知到观察者

平时咱们使用接口注册监听回调自然就是一种观察者模式利用的体现,RxJava系列是对观察者用的非常好,有兴趣可以搜索一下解析的,网上挺多。Android中adapter的notify也是观察者模式的体现哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值