En resumen, Observer Pattern = editor + suscriptor.
El patrón de observador se ha utilizado en el oyente de acciones de la GUI. El ejemplo de Swing GUI muestra cómo funciona el oyente de acción como un observador.
El siguiente es un ejemplo típico sobre cazatalentos. Hay dos roles en este diagrama:
Diagrama de clase
Código Java
Interfaz de sujeto.
public interface Subject { public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyAllObservers(); } |
Interfaz de observador.
public interface Observer { public void update(Subject s); } |
La clase HeadHunter implementa Subject.
import java.util.ArrayList; public class HeadHunter implements Subject{ //define a list of users, such as Mike, Bill, etc. private ArrayList<Observer> userList; private ArrayList<String> jobs; public HeadHunter(){ userList = new ArrayList<Observer>(); jobs = new ArrayList<String>(); } @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<String> getJobs() { return jobs; } public String toString(){ return jobs.toString(); } } |
JobSeeker es un observador.
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); } } |
Punto de partida.
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"); } } |
Patrón de observador en JDK
Ejemplo de GUI de swing