Quando um cliente precisa conversar com muitas classes, APIs ou serviços internos, o código tende a ficar acoplado e difícil de manter.
O padrão Facade resolve isso oferecendo uma interface simples para um fluxo complexo.
Imagine um sistema que precisa matricular um aluno, validar pendências, verificar vagas e enviar confirmação.
Sem uma fachada, o controlador pode acabar conhecendo detalhes demais do subsistema.
emitirCertificado()
class AlunoService { public String buscarNomeAluno(int alunoId) { return "Marina Souza"; } } class HistoricoService { public boolean concluiuCurso(int alunoId) { return true; } }
class CertificadoFacade { private AlunoService alunoService = new AlunoService(); private HistoricoService historicoService = new HistoricoService(); private PdfService pdfService = new PdfService(); public void emitirCertificado(int alunoId) { if (!historicoService.concluiuCurso(alunoId)) { return; } String nome = alunoService.buscarNomeAluno(alunoId); pdfService.gerarPdf("Certificado de conclusao para " + nome); } }