Java 观察者模式

2021-02-08  本文已影响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
上一篇 下一篇

猜你喜欢

热点阅读