Categorías
Design Patterns Stories

Patrón de diseño de Java: Observador

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: HeadHunter y Demandante de empleo. Los solicitantes de empleo se suscriben a un cazatalentos, y el cazatalentos notifica a los solicitantes de empleo cuando hay una nueva oportunidad laboral.

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();
	}
}
  Patrón de diseño de Java: método de plantilla

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

java.util.EventListener

Ejemplo de GUI de swing

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *