对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
举个栗子:假设有三个人,小美(女,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