希望长大对我而言,是可以做更多想做的事,而不是被迫做更多不想做的事...... 首页 设计模式之观察者模式 丁D 学无止境 2021-04-05 15:30 73904已阅读 设计模式 观察者模式 摘要本文将介绍观察者模式。 ### 什么是观察者模式 观察者模式定义了对象之间一种一对多的关系,即一个对象发生改变的时候,会通知其他相关的对象。 观察者模式的好处降低了观察目标(被观察者)和观者者的耦合关系。 使用场景:观察者模式一般用于订阅功能,微博订阅,当我们订阅了一个博主,当博主发布了文章就会通知我们。 ![](/upload/1018770-20190523171217163-733072511.png) 我们看如上面的类图,它 其实就是2个接口和2个实现类。 subject(主题、观察目标、被观察者):这是一个接口定义了添加、删除、和通知观察者的方法 observer(观察者):这是一个接口定义了接收通知的方法。 concreateSubject:主题的具体实现方法,维护了一个观察者的list concreteObserber:观察者的具体实现方法。 ### 实战小demo 我们假设本博客发布一篇文章,需要通知各位粉丝来阅读。 分析:主题、被观察者、观察者目标就是本博客,粉丝就是观察者。 被观察者接口 ```java package com.ding; public interface Subject { public void addObserver(Observer observer); public void removeObserver(Observer observer); public void notifyObserver(); } ``` 观察者接口 ```java package com.ding; public interface Observer { public void update(String msg); } ``` 被观察者实现类 ```java package com.ding; import java.util.ArrayList; import java.util.List; public class BlogSubject implements Subject{ // 面向接口编程,这里泛型是接口 private List observerList = new ArrayList<>(); /** * 添加观察者 */ @Override public void addObserver(Observer observer) { this.observerList.add(observer); } /** * 移除观察者 */ @Override public void removeObserver(Observer observer) { this.observerList.remove(observer); } /** * 发生改变通知所有的观察者 */ @Override public void notifyObserver() { this.observerList.forEach(o->{ o.update("我发布了新的文章。。。"); }); } } ``` 观察者实现类 ```java package com.ding; public class FansObserver1 implements Observer{ @Override public void update(String msg) { System.out.println("我是粉丝1:" + msg); } } ``` 测试 ```java package com.ding; public class ObserverTest { public static void main(String[] args) { BlogSubject blogSuject = new BlogSubject(); FansObserver1 fans1 = new FansObserver1(); FansObserver2 fans2 = new FansObserver2(); blogSuject.addObserver(fans1); blogSuject.addObserver(fans2); blogSuject.notifyObserver(); System.out.println("----------分割---------"); blogSuject.removeObserver(fans1); blogSuject.notifyObserver(); } } 输出 我是粉丝1:我发布了新的文章。。。 我是粉丝2:我发布了新的文章。。。 ----------分割--------- 我是粉丝2:我发布了新的文章。。。 ``` ### java自带的观察者模式 累了,以后再写 **这短短的一生我们最终都会失去,不妨大胆一点,爱一个人,攀一座山,追一个梦** 很赞哦! (3) 上一篇:Elasticsearch之nested object 下一篇:利用accesslog统计QPS 目录 点击排行 Elasticsearch6.3.2之x-pack redis哨兵 2019-07-09 22:05 Redis+Twemproxy+HAProxy+Keepalived 2019-07-12 17:20 GC优化策略和相关实践案例 2019-10-10 10:54 JVM垃圾回收器 2019-10-10 10:23 标签云 Java Spring MVC Mybatis Ansible Elasticsearch Redis Hive Docker Kubernetes RocketMQ Jenkins Nginx 友情链接 郑晓博客 佛布朗斯基 凉风有信 MarkHoo's Blog 冰洛博客 南实博客 Rui | 丁D Java研发工程师 生活可以用「没办法」三个字概括。但别人的没办法是「腿长,没办法」、「长得好看,没办法」、「有才华,没办法」。而你的没办法,是真的没办法。 请作者喝咖啡