【学习打卡】第十一天 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个小时,重新学习一下设计模式 更加清楚知道观察者模式的应用以及如何在自己项目当中去使用它 大家一起加油 💪🏻
共同學習,寫下你的評論
評論加載中...
作者其他優質文章



