预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共93页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

可重用的设计模式设计模式本章目录11.1引言11.1引言11.1.1模式简史11.1.2目前的软件模式11.2模式模板11.3常见的设计模式一、概述观察者模式中有一个“主题”对象和若干“观察者”对象,主题和观察者之间是一对多的依赖关系。 当主题的状态发生变化时,所有观察者都得到通知。 例如,求职中心为主题,求职者为观察者。二、模式的结构与使用importjava.util.ArrayList; publicclassSeekJobCenterimplementsSubject{ Stringmess; booleanchanged; ArrayList<Observer>personList; SeekJobCenter(){ personList=newArrayList<Observer>(); mess=""; changed=false;}//添加观察者 publicvoidaddObserver(Observero){ if(!(personList.contains(o))) personList.add(o); } //删除观察者 publicvoiddeleteObserver(Observero){ if(personList.contains(o)) personList.remove(o); }publicvoidnotifyObservers(){//通知观察者更新数据 if(changed){//如果有新招聘信息 for(inti=0;i<personList.size();i++){ Observerobserver=personList.get(i); observer.hearTelephone(mess);}//观察者更新数据源 changed=false; }} publicvoidgiveNewMess(Stringstr){//是否有新招聘信息 if(str.equals(mess)) changed=false; else{mess=str; changed=true;}}}importjava.io.*; publicclassUniverStudentimplementsObserver{ Subjectsubject; FilemyFile; UniverStudent(Subjectsubject,StringfileName){//初始化 this.subject=subject; subject.addObserver(this);//使当前实例成为subject所引用的具体主题的观察者 myFile=newFile(fileName); } publicvoidhearTelephone(StringheardMess){//观察者监测到新信息,更新自己信息 try{RandomAccessFileout=newRandomAccessFile(myFile,"rw"); out.seek(out.length()); byte[]b=heardMess.getBytes(); out.write(b);//更新文件中的内容 System.out.print("我是一个大学生,"); System.out.println("我向文件"+myFile.getName()+"写入如下内容:"); System.out.println(heardMess); } catch(IOExceptionexp){ System.out.println(exp.toString()); }}}importjava.io.*; importjava.util.regex.*; publicclassHaiGuiimplementsObserver{ Subjectsubject; FilemyFile; HaiGui(Subjectsubject,StringfileName){ this.subject=subject; subject.addObserver(this);//使当前实例成为subject所引用的具体主题的观察者 myFile=newFile(fileName);} publicvoidhearTelephone(StringheardMess){ try{//先判断新招聘信息里是否包含“java程序员”或者“软件”关键词 booleanboo=heardMess.contains("java程序员")||heardMess.contains("软件"); if(boo){ RandomAccessFileout=newRandomAccessFile(myFile,"rw"); out.seek(out.length()); byte[]b=heardMess.get