为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第十二天 Java设计模式精讲-Debug方式+内存分析 第二十一讲

【学习打卡】第十一天 Java设计模式精讲-Debug方式+内存分析 第二十讲

课程名称:Java设计模式精讲-Debug方式+内存分析,真正学懂设计模式

课程章节: 观察者模式+Coding+源码解析

主讲老师:Geely

课程内容:

今天学习的内容包括:

什么是 观察者模式    观察者模式 优点 缺点  Coding  源码解析 以及在业务上的应用

课程收获:

观察者模式  定义与类型

1.定义

 定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,

它的所有依赖者观察者都会收到通知并更新

1.1 特点 --业务案例

 打个比方 我们在微博上一篇文章点赞  这就代表者你是观察者 而微博这条信息就是被观察者 也就是主题对象 这个主题对象被评论和点赞的时候 微博就去通知观察者即点赞的人 不需要你实时去刷新 比如京东商品有个减价的提示这个也是观察者的具体案例与应用 对商品的价格进行监听  ,比如还有课程和讲师 比如学生在课程上提了一个问题 那么这个讲师就会收到这个问题 进行处理也具体的业务应用

1.2 类型  : 行为型

2.适用场景

   1、关联行为场景,建议一套触发机制

3.缺点

  1.观察者之间有过多的细节依赖、提高时间消耗及程序复杂度

  2.使用要得当 要避免循环调用

4.优点

    1.观察者和被观察者之间建立一个抽象的耦合

    2.观察者模式支持广播通信(类似于消息广播)

7.uml 设计图

https://img1.sycdn.imooc.com//62f870690001788b09921148.jpg

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);

    }
}

测试结果如下

https://img1.sycdn.imooc.com//62f870830001208f14440252.jpg

监听器的实现

https://img1.sycdn.imooc.com//62f870910001547a21081032.jpg

spring 当中使用

https://img1.sycdn.imooc.com//62f870a4000122d128461448.jpg

总结:今天学习课程共用了2个小时,重新学习一下设计模式 更加清楚知道观察者模式的应用以及如何在自己项目当中去使用它  大家一起加油 💪🏻













点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消