`
怪盗西特乐
  • 浏览: 28026 次
社区版块
存档分类
最新评论

Java观察者模式

 
阅读更多

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();   
      }
}
 
  • 大小: 12.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics