Skip to content

Instantly share code, notes, and snippets.

@alexjosesilva
Created February 22, 2024 11:01
Show Gist options
  • Save alexjosesilva/6defae626947a5ed51d0a5b2defe81d1 to your computer and use it in GitHub Desktop.
Save alexjosesilva/6defae626947a5ed51d0a5b2defe81d1 to your computer and use it in GitHub Desktop.
Observer
import java.util.ArrayList;
import java.util.List;
// Interface do Observador
interface Observer {
void update(String message);
}
// Classe Concreta do Observador
class ConcreteObserver implements Observer {
private String observerName;
public ConcreteObserver(String observerName) {
this.observerName = observerName;
}
@Override
public void update(String message) {
System.out.println(observerName + " recebeu a mensagem: " + message);
}
}
// Interface do Sujeito (Assunto)
interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers(String message);
}
// Classe Concreta do Sujeito (Assunto)
class ConcreteSubject implements Subject {
private List<Observer> observers = new ArrayList<>();
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
// Método para simular alguma mudança no sujeito que notificará os observadores
public void doSomething() {
// Simulação de alguma ação
System.out.println("Algo aconteceu no Sujeito!");
notifyObservers("Mensagem de notificação do Sujeito");
}
}
// Classe principal para testar o Observer
public class Main {
public static void main(String[] args) {
// Criando um sujeito (assunto)
ConcreteSubject subject = new ConcreteSubject();
// Criando observadores
Observer observer1 = new ConcreteObserver("Observador 1");
Observer observer2 = new ConcreteObserver("Observador 2");
// Registrando observadores no sujeito
subject.registerObserver(observer1);
subject.registerObserver(observer2);
// Simulando uma mudança no sujeito que notificará os observadores
subject.doSomething();
// Removendo um observador
subject.removeObserver(observer2);
// Simulando outra mudança no sujeito
subject.doSomething();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment