Created
February 22, 2024 11:01
-
-
Save alexjosesilva/6defae626947a5ed51d0a5b2defe81d1 to your computer and use it in GitHub Desktop.
Observer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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