当前位置: 首页 > 后端技术 > Java

设计模式-观察者模式

时间:2023-04-01 18:37:44 Java

观察者模式1.定义和类型定义:定义对象之间一对多的依赖关系,允许多个观察者对象同时监视一个主体对象。当主题对象发生变化时,它的所有依赖项都会得到通知并更新。类型:Behavioral2.适用于场景关联的行为场景,建立触发机制3.优点在观察者与被观察者之间建立抽象耦合的观察者模式,支持广播通信4.缺点观察者过多依赖细节,增加时间消耗和程序复杂度正确使用避免循环调用5.编码创建问题类publicclassTeacherimplementsObserver{privateStringteacherName;publicTeacher(StringteacherName){this.teacherName=teacherName;}@Overridepublicvoidupdate(Observableo,Objectarg){Coursecourse=(Course)o;问题question=(Question)arg;System.out.println(teacherName+"teacher's"+course.getCourseName()+",receivedonefromThequestionraisedby"+question.getStudentName()+":"+question.getQuestionContent());}}创建一个继承Observable类的课程类,说明它是一个可以被观察者重写的方法,setChange()标志告诉观察者publicclassCourseextendsObservable{privateStringcourseName;publicCourse(StringcourseName){this.courseName=courseName;}publicStringgetCourseName(){返回课程名称;}公共无效产品ceQuestion(Coursecourse,Questionquestion){System.out.println(question.getStudentName()+"在"+course.getCourseName()+"课程中,提出了一个问题:"+question.getQuestionContent());设置更改();notifyObservers(问题);}}创建教师类实现Observer接口,即观察者重写update方法,可以根据观察者传递的参数编写业务逻辑。publicclassTeacherimplementsObserver{privateStringteacherName;publicTeacher(StringteacherName){this.teacherName=teacherName;}@Overridepublicvoidupdate(Observableo,Objectarg){Coursecourse=(Course)o;问题question=(Question)arg;System.out.println(teacherName+"teacher"+course.getCourseName()+",从"+question.getStudentName()+"收到问题:"+question.getQuestionContent());}}TestclasspublicclassTest{publicstaticvoidmain(String[]args){//创建观察者Coursecourse=newCourse("如何让富婆爱上我~");//创建观察者Teacherteacher=newTeacher("HHHH");//绑定observationtheobserver和observedcourse.addObserver(老师);问题question=newQuestion();question.setStudentName("Root");question.setQuestionContent("有富婆的联系方式吗?");course.produceQuestion(课程,问题);}}控制台输出6.总结两种结构:观察者和被观察者。当被观察者发生变化时,可以通知观察者。观察者可以接受观察到的变化时传入的参数,并对其进行编码。