content: import java.util.ArrayList;
  import java.util.List;
  
  // Interface para os observadores
  interface Observador {
      void atualizar(String mensagem);
  }
  
  // Interface para o sujeito observado
  interface Sujeito {
      void adicionarObservador(Observador o);
      void removerObservador(Observador o);
      void notificarObservadores();
  }
  
  // Implementação concreta do sujeito (ex: canal de notícias)
  class CanalNoticias implements Sujeito {
      private List<Observador> observadores = new ArrayList<>();
      private String ultimaNoticia;
  
      public void novaNoticia(String noticia) {
          this.ultimaNoticia = noticia;
          notificarObservadores(); // toda vez que há nova notícia, notifica
      }
  
      @Override
      public void adicionarObservador(Observador o) {
          observadores.add(o);
      }
  
      @Override
      public void removerObservador(Observador o) {
          observadores.remove(o);
      }
  
      @Override
      public void notificarObservadores() {
          for (Observador o : observadores) {
              o.atualizar(ultimaNoticia); // chama o método de atualização
          }
      }
  }
  
  // Observador concreto
  class Usuario implements Observador {
      private String nome;
  
      public Usuario(String nome) {
          this.nome = nome;
      }
  
      @Override
      public void atualizar(String mensagem) {
          System.out.println(nome + " recebeu: " + mensagem);
      }
  }
  
  // Teste do padrão Observer
  public class Main {
      public static void main(String[] args) {
          CanalNoticias canal = new CanalNoticias();
  
          Usuario maria = new Usuario("Maria");
          Usuario joao = new Usuario("João");
  
          canal.adicionarObservador(maria);
          canal.adicionarObservador(joao);
  
          canal.novaNoticia("Nova notícia publicada!");
      }
  }
  