观察者模式

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)   观察者中需要有个接收被观察者通知的方法。

如此而已!

观察者模式定义的是一对多的依赖关系,一个被观察者可以拥有多个观察者,并且通过接口对观察者与被观察者进行逻辑解耦,降低二者的直接耦合。

 

posted @ 2021-02-22 17:07  十二A~  阅读(87)  评论(0)    收藏  举报