Java 观察者模式

定义:定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的依赖者(观察者)都会收到通知并更新

适用场景:

关联行为场景,建立一套触发机制

优点:

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

2.观察者模式支持广播通讯

缺点:

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

使用得当,要避免循环调用

import java.util.Observable;public class Course extends Observable {private  String courseName;public Course(String courseName) {this.courseName = courseName;}public String getCourseName() {return courseName;}public void produceQuestion(Course course,Question question){System.out.println(question.getUserName()+"在"+course.courseName+"提交了问题");setChanged();notifyObservers(question);}
}

  

public class Question {private String userName;private String questionContent;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getQuestionContent() {return questionContent;}public void setQuestionContent(String questionContent) {this.questionContent = questionContent;}
}

  

import java.util.Observable;
import java.util.Observer;public class Teacher implements Observer {private String teacherName;public Teacher(String teacherName) {this.teacherName = teacherName;}@Overridepublic void update(Observable o,Object arg){Course course=(Course)o;Question question=(Question)arg;System.out.println(teacherName+"老师的"+course.getCourseName()+"课程接收到一个"+question.getUserName()+"提交的问答:"+question.getQuestionContent());}
}

  

public class Test {public static void main(String[] args) {Course course=new Course("Java设计模式精讲");Teacher teacher=new Teacher("laoshi");course.addObserver(teacher);Question question=new Question();question.setUserName("Geelly");question.setQuestionContent("Java");course.produceQuestion(course,question);}
}

  

 

转载于:https://www.cnblogs.com/sunliyuan/p/10789776.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果电脑快捷键有哪些?mac系统快捷键大全详细介绍(全部)_苹果MAC_操作系统_脚本之家

苹果电脑快捷键有哪些?mac系统快捷键大全详细介绍(全部) 电脑中的每对快捷键有对应了一种操作效果,对于使用苹果电脑的操作系统的新人来说,快捷键是个很麻烦的问题,要一个个的找到快捷键也不是很容易的问题,本文就为大…

Oracle数据库基础入门《一》Oracle服务器的构成

Oracle数据库基础入门《一》Oracle服务器的构成 Oracle 服务器是一个具有高性能和高可靠性面向对象关系型数据库管理系统,也是一 个高效的 SQL 语句执行环境。 Oracle 服务器具备以下的特点: ● 能够可靠的进行多用户环境下大量数据的处理,允…

虚拟机配置域名

1.虚拟机的hosts文件 2.本地电脑的hosts文件 转载于:https://www.cnblogs.com/xiaobiaomei/p/10790907.html

查看端口、关闭端口

1.在dos命令下查看tomcat占用的进程,首先在运行里输入cmd进入dos,输入命令“netstat -ano | findstr 8080”(tomcat默认端口为8080)。查出PID(最后一列就是),假设PID为207340,输入命…

HTML5 新标签总汇

HTML5 新标签总汇 2010-12-16 20:44 聂微东 阅读(5060) 评论(8) 编辑 收藏 HTML5新标签总汇&#xff1a; 有问题欢迎指出,有关于CSS3方面的知识点较多,下周一前整理出来. <article> 标签定义外部的内容&#xff08;外部内容如blog,news&#xff09;。     …

Web文件管理器 elfinder-彩龙社区

最近接到一个需求&#xff0c;客户需要能在web页面进行文件管理&#xff0c;在需求调研时发现一个很好用的开源web文件管理器插件 elfinder&#xff0c;功能比较完善&#xff0c;社区也很活跃&#xff0c;方便二次开发&#xff0c;源码在GitHub上有将近3K的star&#xff0c;而且…

springmvc中对日期格式化的处理

DateTimeFormat(pattern"yyyy-MM-dd") 返回的时候java.util.Date pattern"yyyy-MM-dd"必须要和页面中的日期格式对应。 contraller层&#xff1a; package com.chenk.web.controller;import org.springframework.stereotype.Controller; import org.spring…

再次学习javascript中的參数传递

javascript中的全部函数的參数传递都是依照值传递的&#xff0c;做了以下測试&#xff1a; function addTen(num){num 10;return num; }var count 20; var result addTen(count); alert(cont); //20 alert(result); //30 好吧。上面仅仅是做了基本类型的传递&#xff0c;再…

基于spring-boot和elfinder的在线文件管理

基于spring-boot和elfinder的在线文件管理 大家好&#xff0c;我是帅气小伙&#xff0c;今天为大家分享的是一个轮子&#xff0c;最近在项目中需要一些CMS的功能&#xff0c;在线管理一些静态资源文件&#xff0c;在经过一番资料查找&#xff0c;最终决定使用elfinder。它的官方…

bzoj 4736: 温暖会指引我们前行 (LCT 维护最大生成树)

链接&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id4736 题面&#xff1a; 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了&#xff01;” 这时 远处的天边出现了一位火焰之神 “我将赐予你们温暖和希…

WPF使用IDataErrorInfo进行数据校验

WPF使用IDataErrorInfo进行数据校验 原文:WPF使用IDataErrorInfo进行数据校验这篇博客将介绍如何使用IDataErrorInfo进行数据校验。下面直接看例子。一个Customer类&#xff0c;两个属性(FirstName, Age) class Customer {public string FirstName{get;set;}public int Age{get…

web 界面设计 Axure元件样式

找不到原创了&#xff0c;若侵权&#xff0c;请联系博主删除&#xff01;谢谢

cf 786 B 线段树优化建图

cf 786 B 链接 CF 思路 n个点&#xff0c;3种建边方式&#xff0c;规模\(O(n^2)\) 线段树优化建图 注意 读入的数据好坑啊&#xff0c;说好的v,u变成了u,v。 两棵树&#xff0c;一棵出&#xff0c;一棵入。线段树的作用只不过是按照那个形状建边而已&#xff0c;并没啥用。 初始…

mysql -uroot -p -P3306 -h192.168.0.111无法远程连接mysql

1 在装有MySQL的机器上登录MySQL mysql -u root -p密码2 执行USE mysql; 3 执行UPDATE user SET host % WHERE user root;这一句执行完可能会报错&#xff0c;不用管它4 执行FLUSH PRIVILEGES; 4---> 刷新权限表&#xff0c;更改后需执行才能生效。 一篇博客&#xff1a;h…

iPhone6和iPhone6 plus的iOS8设计尺寸参考指南

找不到原创了&#xff0c;若侵权&#xff0c;请联系博主删除&#xff01;谢谢

欧几里得

转载于:https://www.cnblogs.com/morui/p/10799359.html

pl/sql下DBMS_OUTPUT.PUT_LINE的输出位置

项目里存储过程中用到DBMS_OUTPUT.PUT_LINE进行输出日志&#xff0c;一开始不知道在哪里看&#xff0c;网上很多都是直接运行后的位置。但是储过程中的日志找了好一会&#xff0c;记录一下。 1、运行时输出位置。 declarein_interval_start_id varchar2(40);in_interval_end_id…

javaweb学习总结(四十五)——监听器(Listener)学习二

一、监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器。 这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和Ser…

Excel_DATEDIF函数计算工龄、计算年假

基本语法 DATEDIF(开始日期&#xff0c;结束日期&#xff0c;unit) 基本用法&#xff1a; 实战&#xff1a; 1、计算工龄&#xff1a; 2、计算年假 转载于:https://www.cnblogs.com/wodexk/p/10799890.html

Cordova - 彻底搞定IOS编译!

操作系统&#xff1a;OSX10.14 XCode&#xff1a;10.1 Cordova&#xff1a;8.1.2 假设已经配置好了Cordova开发环境&#xff0c;Apple ID你也有&#xff0c;XCode也可以正常工作了&#xff0c;那么就可以继续看这篇文章了&#xff01; 如果你没有看我这篇文章&#xff0c;那么你…