content: // Classe abstrata que define o template (modelo do algoritmo)
  abstract class PrepararBebida {
      // Template method que define o esqueleto do processo
      public final void preparar() {
          ferverAgua();
          adicionarIngredientes();
          servir();
      }
  
      protected void ferverAgua() {
          System.out.println("Fervendo água...");
      }
  
      protected abstract void adicionarIngredientes(); // passo variável
  
      protected void servir() {
          System.out.println("Servindo bebida na xícara.");
      }
  }
  
  // Implementação concreta: Café
  class Cafe extends PrepararBebida {
      protected void adicionarIngredientes() {
          System.out.println("Adicionando café.");
      }
  }
  
  // Implementação concreta: Chá
  class Cha extends PrepararBebida {
      protected void adicionarIngredientes() {
          System.out.println("Adicionando chá.");
      }
  }
  
  // Teste do Template Method
  public class Main {
      public static void main(String[] args) {
          PrepararBebida cafe = new Cafe();
          cafe.preparar();
  
          System.out.println("---");
  
          PrepararBebida cha = new Cha();
          cha.preparar();
      }
  }
  