美文网首页
Java 观察者模式

Java 观察者模式

作者: 索性流年 | 来源:发表于2021-02-08 08:54 被阅读0次

文集地址

一句话总结观察者模式

  • 找人看着一件事,有情况就通知你

什么是观察者模式?

  • 在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。

应用场景小案例

  • 一家车店丢了一台车,却不知道被谁偷了,这台车的损失只能由店主自己承担,为了避免这样的损失,他只能在店里安装监控警报,这样,谁在来偷车,警报便会报警,告诉店主有人来偷车,他就可以拎着棍子下来抓小偷。

  • 总结: 设立一个观察角色(监控),时时刻刻盯着一个对象(车),当这个对象发生改变时便会告知设立方(店主),设立方便会做出相应的处理。

实现案例

  • 被观察者
/**
 * 被观察者(车)
 *
 * @author ext.liuyan10
 * @date 2021/2/5 15:53
 */
public class Car extends Observable {
    /**
     * 车位状态(0在位 1被盗)
     */
    private Integer type;

    /**
     * 车位状态改变
     * @param type 车位状态
     */
    public void setType(Integer type) {
        this.type = type;
        System.out.println("车位状态改变");
        //通知观察者
        setChanged();
        //发送车位消息
        notifyObservers(type);
    }
}


  • 观察者
/**
 * 观察者(店主)
 *
 * @author ext.liuyan10
 * @date 2021/2/5 16:01
 */
public class CarConcreteObserver implements Observer {

    public CarConcreteObserver() {
    }

    /**
     * 接收报警信息
     */
    @Override
    public void update(Observable o, Object arg) {
        if(arg instanceof Integer){
            if (0 == (Integer) arg){
                System.out.println("车还在");
            }
            else {
                System.out.println("车不在了拿棍子");
            }
        }
    }
  • 调用案例
/**
 * @author ext.liuyan10
 * @date 2021/2/5 16:09
 */
public class ObserverApp {
    public static void main(String[] args) {
        //创建被观察对象
        Car car = new Car();
        car.setType(1);
        System.out.println("没装监控不知道");
        //创建观察者
        CarConcreteObserver carConcreteObserver = new CarConcreteObserver();
        car.addObserver(carConcreteObserver);

        car.setType(0);
        car.setType(1);
    }
}

*打印结果

Connected to the target VM, address: '127.0.0.1:53160', transport: 'socket'
车位状态改变
没装监控不知道
车位状态改变
车还在
车位状态改变
车不在了拿棍子
Disconnected from the target VM, address: '127.0.0.1:53160', transport: 'socket'

Process finished with exit code 0

相关文章

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • RxJava 2.x知识笔记

    观察者模式的运用 传统的Java观察者模式可以参考此篇博客:Java观察者模式案例简析 RxJava 是基于Jav...

  • java建造者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java单例模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java外观模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java适配器模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java观察者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java代理模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java策略模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • 六、JDK自带观察者

    利用Java提供的Observer接口和Observable类实现观察者模式 对于观察者模式,其实Java已经为我...

网友评论

      本文标题:Java 观察者模式

      本文链接:https://www.haomeiwen.com/subject/bfnfzctx.html