观察者模式
1、什么叫观察者模式
观察者模式又被称为发布订阅模式。它定义了对象之间一对多的依赖,当一个对象状态发生改变时,它的所有依赖者都会收到通知并自动更新相关内容。
2、具体理解
上面的官方说话可能比较难以理解,我们把它转化成我们容易懂的样例。比如:微博的订阅,当订阅了某个人的微博账号后,博主发布新消息时就会通知我们
//博主告诉别人自己期望被订阅
public interface Sub{ public void sub(String message); }
//网友xiaojiang订阅博主
public class XiaoJiang implements Sub{ @Override public void sub(String message) { System.out.println("XiaoJiang收到消息:"+message); } }
//网友xiaozhou也订阅博主
public class XiaoZhou implements Sub { @Override public void Sub (String message) { System.out.println("XiaoZhou收到消息:"+message); } }
//博主拥有发布消息的权利
public class BoZhuA{ public List<Sub> subList = new ArrayList<>();
//博主添加订阅 public void addSub(Sub sub){ subList .add(sub); }
//博主往微博圈发送动态 public void notifySub(){ for (Sub sub: subList ) { sub.sub("爱豆们,谢谢你们订阅我!!"); } } }
//博主添加了两个订阅后,博主发送消息
public static void main(String[] args) {
BoZhuA boZhu = new BoZhuA();
XiaoJiang xiaoJiang = new XiaoJiang();
XiaoZhou xiaoZhou = new XiaoZhou();
boZhu.addSub(xiaoJiang);
boZhu.addSub(xiaoZhou);
boZhu.notifySub();
}
main运行之后控住台就会输出
XiaoJiang收到消息:爱豆们,谢谢你们订阅我!!
XiaoZhou收到消息:爱豆们,谢谢你们订阅我!!
当xiaozhou和xiaojiang 订阅了BoZhuA后,BoZhuA只要在他的微博圈发动态,xiaozhou和xiaojiang就可以收到消息推送,这样是不是好理解多啦~
3、理解总结
关键点:
1、针对观察者与被观察者分别定义接口,有利于分别进行扩展。
2、重点就在被观察者的实现中:
(1)定义观察者集合,并定义针对集合的添加、删除操作,用于增加、删除订阅者(观察者)
(2)定义通知方法,用于将新情况通知给观察者用户(订阅者用户)
(3) 观察者中需要有个接收被观察者通知的方法。
如此而已!
观察者模式定义的是一对多的依赖关系,一个被观察者可以拥有多个观察者,并且通过接口对观察者与被观察者进行逻辑解耦,降低二者的直接耦合。

浙公网安备 33010602011771号