content: // Interface do Visitor
  interface Visitor {
      void visitarLivro(Livro livro);
      void visitarRevista(Revista revista);
  }
  
  // Interface para elementos que aceitam visitantes
  interface ItemBiblioteca {
      void aceitar(Visitor visitor);
  }
  
  // Classe concreta: Livro
  class Livro implements ItemBiblioteca {
      String titulo;
  
      public Livro(String titulo) {
          this.titulo = titulo;
      }
  
      public void aceitar(Visitor visitor) {
          visitor.visitarLivro(this);
      }
  }
  
  // Classe concreta: Revista
  class Revista implements ItemBiblioteca {
      String nome;
  
      public Revista(String nome) {
          this.nome = nome;
      }
  
      public void aceitar(Visitor visitor) {
          visitor.visitarRevista(this);
      }
  }
  
  // Implementação concreta do Visitor
  class ExibirVisitor implements Visitor {
      public void visitarLivro(Livro livro) {
          System.out.println("Exibindo livro: " + livro.titulo);
      }
  
      public void visitarRevista(Revista revista) {
          System.out.println("Exibindo revista: " + revista.nome);
      }
  }
  
  // Teste do padrão Visitor
  public class Main {
      public static void main(String[] args) {
          ItemBiblioteca livro = new Livro("Java Básico");
          ItemBiblioteca revista = new Revista("Tech Monthly");
  
          Visitor exibidor = new ExibirVisitor();
  
          livro.aceitar(exibidor);
          revista.aceitar(exibidor);
      }
  }
  