import java.util.List;
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
Subject canal = new Canal("Canal 01");
Observer n1 = new Notificacao("N1");
Observer n2 = new Notificacao("N2");
canal.addNotificacao(n1);
canal.addNotificacao(n2);
n1.inscreverNoCanal(canal);
n2.inscreverNoCanal(canal);
canal.novoPost();
}
}
interface Observer {
void enviar();
void inscreverNoCanal(Subject canal);
}
class Notificacao implements Observer {
private String nome;
private Subject canal = new Canal("Padrão");
public Notificacao(String nome) {
this.nome = nome;
}
public void inscreverNoCanal(Subject canal) {
this.canal = canal;
}
public void enviar() {
System.out.println("Enviando notificação '" + this.nome + "'. Pelo canal '" + canal.getNome() + "'.");
}
}
interface Subject {
String getNome();
void addNotificacao(Observer notificacao);
void novoPost();
void notificar();
}
class Canal implements Subject {
private List<Observer> notificacoes = new ArrayList<>();
private String nome;
public Canal(String nome) {
this.nome = nome;
}
public String getNome() {
return this.nome;
}
public void addNotificacao(Observer notificacao) {
notificacoes.add(notificacao);
}
public void novoPost() {
System.out.println("Novo post adicionado!");
notificar();
}
public void notificar() {
for (Observer notificacao : notificacoes) {
notificacao.enviar();
}
}
}