行为型模式之一:观察者模式

原创
2015/08/27 16:55
阅读数 99

简单来说,观察者模式 = 发布 + 订阅 观察者模式在GUI 动作监听器中又使用,Swing GUI 例子中展现了动作监听器像监听器一样工作。 下面是一个关于猎头的典型例子,这里在类图中有两个角色-HeadHunter和JobSeeker。求职者订阅一个猎头,当有新职位机会时,收听猎头的通知信息。

类图

Java代码

Subject 接口

public interface Subject {
  public void registerObserver(Observer o);
  public void removeObserver(Observer o);
  public void notifyAllObservers();
}

Observer 接口

public interface Observer {
  public void update(Subject s);
}

HeadHunter 实现了Subject

import java.util.ArrayList;
 
public class HeadHunter implements Subject{
 
  //define a list of users, such as Mike, Bill, etc.
  private ArrayList userList;
  private ArrayList jobs;
 
  public HeadHunter(){
    userList = new ArrayList();
    jobs = new ArrayList();
  }
 
  @Override
  public void registerObserver(Observer o) {
    userList.add(o);
  }
 
  @Override
  public void removeObserver(Observer o) {}
 
  @Override
  public void notifyAllObservers() {
    for(Observer o: userList){
      o.update(this);
    }
  }
 
  public void addJob(String job) {
    this.jobs.add(job);
    notifyAllObservers();
  }
 
  public ArrayList getJobs() {
    return jobs;
  }
 
  public String toString(){
    return jobs.toString();
  }
}

JobSeeker 是一个观察者

public class JobSeeker implements Observer {
 
  private String name;
 
  public JobSeeker(String name){
    this.name = name;
  }
  @Override
  public void update(Subject s) {
    System.out.println(this.name + " got notified!");
    //print job list
    System.out.println(s);
  }
}

开始点

public class Main {
 
  public static void main(String[] args) {
    HeadHunter hh = new HeadHunter();
    hh.registerObserver(new JobSeeker("Mike"));
    hh.registerObserver(new JobSeeker("Chris"));
    hh.registerObserver(new JobSeeker("Jeff"));
 
    //Each time, a new job is added, all registered job seekers will get noticed.
    hh.addJob("Google Job");
    hh.addJob("Yahoo Job");
  }
}

观察者模式在JDK中

java.util.EventListener Swing GUI 例子

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部