Uml图:
主题:
public interface Subject {
public void addObserver(Observer o);
public void deleteObserver(Observer o);
public void notifuObserver();
}
观察者:
public interface Observer {
public void hearTelephone(String headMess);
}
具体主题:
import java.util.ArrayList;
public class SeekJobCenter implements Subject {
String mess;
boolean changed;
ArrayList<Object> personList;
SeekJobCenter(){
personList =new ArrayList<Object>();
mess="";
changed=false;
}
@Override
public void addObserver(Observer o) {
if (!personList.contains(o)) {
personList.add(o);
}
}
@Override
public void deleteObserver(Observer o) {
if (personList.contains(o)) {
personList.remove(o);
}
}
@Override
public void notifuObserver() {
if (changed) {
for (int i = 0; i < personList.size(); i++) {
//Observer observer =personList.get(i);
//observer.hearTelephone(mess);
Observer observer =(Observer) personList.get(i);
observer.hearTelephone(mess);
}
changed =false;
}
}
public void giveNewMess(String str) {
if (str.equals(mess)) {
changed=false;
}
else {
mess=str;
changed =true;
}
}
}
具体观察者:
UniversityStudent.java
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
public class UniversityStudent implements Observer {
Subject subject;
File myFile;
UniversityStudent(Subject subject,String fileName){
this.subject=subject;
subject.addObserver(this);
myFile =new File(fileName);
}
@Override
public void hearTelephone(String headMess) {
try {
RandomAccessFile out =new RandomAccessFile(myFile, "rw");
out.seek(out.length());
byte[] b =headMess.getBytes();
out.write(b);
System.out.print("我是一个大学生,");
System.out.println("我想文件"+myFile.getName()+"写入如下内容");
System.out.println(headMess);
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
HaiGui.java
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
public class HaiGui implements Observer {
Subject subject;
File myFile;
HaiGui(Subject subject,String fileName) {
this.subject=subject;
subject.addObserver(this);
myFile =new File(fileName);
}
@Override
public void hearTelephone(String headMess) {
try {
boolean boo =headMess.contains("java程序员")||headMess.contains("软件");
if (boo) {
RandomAccessFile out=new RandomAccessFile(myFile, "rw");
out.seek(out.length());
byte[] b =headMess.getBytes();
out.write(b);
System.out.print("我是一个海归");
System.out.println("我向文件"+myFile.getName()+"写入如下内容:");
System.out.println(headMess);
}
else {
System.out.println("我是海归,这次的信息中没有我需要的信息");
}
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
模式使用:
public class Application {
public static void main(String[] args) {
// TODO Auto-generated method stub
SeekJobCenter center =new SeekJobCenter();//具体主题center
UniversityStudent zhanglinStudent =new UniversityStudent(center, "A.txt");//具体观察者
HaiGui wanghaoGui =new HaiGui(center, "B.txt");
center.giveNewMess("腾辉公司需要10个java程序员");
center.notifuObserver();
}
}