观察者模式又名订阅模式,那么我们就从生活中来举例子:

比如你所住的小区门卫王大爷说,小区现在为了响应河蟹社会的口号,居委会每天都会出一条新闻广播消息,需要订阅的业主来门卫交钱订阅,订阅的业主每天早上7点会收到小区广播,不订阅的业主就收不到!

于是我们的“门卫”类就有了:

public class PropertyManager {
    public static String message = "好好学习天天向上";

    /**
     * 登记过的业主
     */
    public List<Owner> owners = new ArrayList<Owner>();
    
    /**
     * 来一个业主就登记进来
     * @param owner
     */
    public void addListener(Owner owner){
        owners.add(owner);
    }
    
    public void noticy(){
        for(Owner owner : owners){
            //通知每个人当前的“message”
        }
    }
}

首先王大爷有个登记表,并且把交了钱订阅的业主登记在这张表上,每天早上就会给这些订阅的业主发送广播,没有订阅的业主则不会受到广播。

总结:观察者模式就是注册一个监听,有变化后就通知这些注册了监听类。