对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

举个栗子:假设有三个人,小美(女,22),小王和小李。小美很漂亮,小王和小李是两个程序猿,时刻关注着小美的一举一动。有一天,小美说了一句:“谁来陪我打游戏啊。”这句话被小王和小李听到了,结果乐坏了,蹭蹭蹭,没一会儿,小王就先冲到小美家门口了,在这里,小美是被观察者,小王和小李是观察者,被观察者发出一条信息,然后观察者们进行相应的处理,看代码:

public interface Person {
    //小王和小李通过这个接口可以接收到小美发过来的消息
    void getMessage(String s);
}

这个接口相当于小王和小李的电话号码,小美发送通知的时候就会拨打getMessage这个电话,拨打电话就是调用接口

public class LaoWang implements Person {

    private String name = "小王";

    public LaoWang(){}

    @Override
    public void getMessage(String s) {
        System.out.println(name + "接到小美打过来的电话,电话内容是:" + s );
    }
}
public class Laoli implements Person {

    private String name = "小李";

    public Laoli(){}

    @Override
    public void getMessage(String s) {
        System.out.println(name + "接到小美打过来的电话,电话内容是:" + s );
    }
}

代码很简单,我们再看看小美的代码和测试

ublic class XiaoMei {
    List<Person> list = new ArrayList<>();

    public XiaoMei(){}

    public void addPerson(Person person){
        list.add(person);
    }

    //遍历list,把自己的通知发送给所有暗恋自己的人
    public void notifyPerson(){
        for(Person person : list){
            person.getMessage("你们过来吧,谁先过来谁就能陪我一起玩游戏!");
        }
    }

    public static void main(String[] args) {
        XiaoMei xiaoMei = new XiaoMei();
        LaoWang laoWang = new LaoWang();
        Laoli laoLi = new Laoli();

        //小王和小李在小美那里都注册一下
        xiaoMei.addPerson(laoLi);
        xiaoMei.addPerson(laoWang);

        xiaoMei.notifyPerson();
    }
}

参考:https://mp.weixin.qq.com/s?__biz=MzIwMTY0NDU3Nw==&mid=2651938221&idx=1&sn=9cb29d1eb0fdbdb5f976306b08d5bdcc&chksm=8d0f32e3ba78bbf547c6039038682706a2eaf83002158c58060d5eb57bdd83eb966a1e223ef6&scene=21#wechat_redirect

12-18 01:04