【学习打卡】第十一天 Java设计模式精讲-Debug方式+内存分析 第二十讲
课程名称:Java设计模式精讲-Debug方式+内存分析,真正学懂设计模式
课程章节: 观察者模式+Coding+源码解析
主讲老师:Geely
课程内容:
今天学习的内容包括:
什么是 观察者模式 观察者模式 优点 缺点 Coding 源码解析 以及在业务上的应用
课程收获:
观察者模式 定义与类型
1.定义
定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,
它的所有依赖者观察者都会收到通知并更新
1.1 特点 --业务案例
打个比方 我们在微博上一篇文章点赞 这就代表者你是观察者 而微博这条信息就是被观察者 也就是主题对象 这个主题对象被评论和点赞的时候 微博就去通知观察者即点赞的人 不需要你实时去刷新 比如京东商品有个减价的提示这个也是观察者的具体案例与应用 对商品的价格进行监听 ,比如还有课程和讲师 比如学生在课程上提了一个问题 那么这个讲师就会收到这个问题 进行处理也具体的业务应用
1.2 类型 : 行为型
2.适用场景
1、关联行为场景,建议一套触发机制
3.缺点
1.观察者之间有过多的细节依赖、提高时间消耗及程序复杂度
2.使用要得当 要避免循环调用
4.优点
1.观察者和被观察者之间建立一个抽象的耦合
2.观察者模式支持广播通信(类似于消息广播)
7.uml 设计图
8.代码如下
package com.zw.design.pattern.creational.behavioral.observer; import java.util.Observable; /*** * 课程类 * * extends Observable 证明可以被观察 * */ public class Course extends Observable { private String courseName; public Course(String courseName) { this.courseName = courseName; } public String getCourseName() { return courseName; } public void productQuestion(Course course,Question question){ System.out.println(question.getUserName()+" 在 "+course.courseName+"提交一个问题"); setChanged(); notifyObservers(question); } }
package com.zw.design.pattern.creational.behavioral.observer; import lombok.Data; /*** * 问题类 */ @Data public class Question { private String userName; private String questionContent; }
package com.zw.design.pattern.creational.behavioral.observer; import java.util.Observable; import java.util.Observer; public class Teacher implements Observer { private String teacherName; public Teacher(String teacherName) { this.teacherName = teacherName; } @Override public void update(Observable o, Object arg) { Course course = (Course)o; Question question = (Question)arg; System.out.println(teacherName+"老师的"+course.getCourseName()+"课程接收到一个"+question.getUserName()+"提交的问答:"+question.getQuestionContent()); } }
3.测试类
package com.zw.design.pattern.creational.behavioral.observer; public class Test { public static void main(String[] args) { Course course = new Course("springboot源码解析"); Teacher teacher1 = new Teacher("Alpha"); Teacher teacher2 = new Teacher("Beta"); course.addObserver(teacher1); course.addObserver(teacher2); //业务逻辑代码 Question question = new Question(); question.setUserName("zw"); question.setQuestionContent("springboot启动类原理"); course.productQuestion(course,question); } }
测试结果如下
监听器的实现
spring 当中使用
总结:今天学习课程共用了2个小时,重新学习一下设计模式 更加清楚知道观察者模式的应用以及如何在自己项目当中去使用它 大家一起加油 💪🏻