O Padrao Facade que e simples de ser aplicado e que traz grandes beneficios aos projetos e dito como sendo um padrao estrutural e esta entre os 23 padroes de projeto do GoF (Gang of Four).Entende-se por padrao estrutural todo padrao de projeto que trata da associacao entre classes e objetos.Como o nome sugere Facade, e realmente uma fachada, podemos fazer a seguinte analogia, quando caminhamos em frente a um predio com uma bela fachada, vemos as belas janelas as paredes bem decoradas, ou seja um ambiente bem amigavel, e ignoramos toda a complexidade por tras da obra, a quantidade de salas, todas as empresas que estao neste predio, deste modo o Facade tambem age nos projetos de software, dentre seus beneficios, alguns sao: - Reduz a complexidade de uma api, liberando acesso a metodos de alto nivel encapsulando os demais. - Produz uma interface comum e simplificada. - Pode encapsular uma ou mais interfaces mal projetadas em uma mais concisa. - Reduz drasticamente o acoplamento entre as camadas do projeto.Veja o Exemplo da Classe Fachada!package Camadas;/* * To change this template, choose Tools | Templates * and open the template in the editor. */import Classes.Agenda;import Classes.Cliente;import Classes.Funcionario;import Classes.Produto;import Classes.Servico;import Classes.Venda;import java.util.ArrayList;/** * * @author GOVEIA */public class Fachada implements InterfaceAgenda, IntefaceCliente, InterfaceFuncionario, InterfaceProduto, InterfaceServico, InterfaceVenda{ private NegocioCliente negocioCliente; private NegocioFuncionario negocioFuncionario; private NegocioProduto negocioProduto; private NegocioServico negocioServico; private NegocioAgenda negocioAgenda; private NegocioVenda negocioVenda; private static Fachada instancia; public static Fachada obterInstancia() { if (instancia == null) { instancia = new Fachada(); } return instancia; } private Fachada() { this.negocioCliente = new NegocioCliente(); this.negocioFuncionario = new NegocioFuncionario(); this.negocioProduto = new NegocioProduto(); this.negocioServico = new NegocioServico(); this.negocioAgenda = new NegocioAgenda(); this.negocioVenda = new NegocioVenda(); } // Fachada Cliente @Override public void cadastrar(Cliente cliente) throws Exception { this.negocioCliente.cadastrar(cliente); } @Override public void remover(Cliente cliente) throws Exception { this.negocioCliente.remover(cliente); } @Override public void alterar(Cliente cliente) throws Exception { this.negocioCliente.alterar(cliente); } @Override public ArrayList listarCliente() throws Exception { return this.negocioCliente.listarCliente(); } @Override public ArrayList consultar(Cliente cliente) throws Exception { return this.negocioCliente.consultar(cliente); } // Fachada Funcionario @Override public void cadastrar(Funcionario funcionario) throws Exception { this.negocioFuncionario.cadastrar(funcionario); } @Override public void remover(Funcionario funcionario) throws Exception { this.negocioFuncionario.remover(funcionario); } @Override public void alterar(Funcionario funcionario) throws Exception { this.negocioFuncionario.alterar(funcionario); } @Override public ArrayList listarFuncionario() throws Exception { return this.negocioFuncionario.listarFuncionario(); } @Override public ArrayList consultar(Funcionario funcionario) throws Exception { return negocioFuncionario.consultar(funcionario); } @Override public void cadastrar(Agenda agenda) throws Exception { this.negocioAgenda.cadastrar(agenda); } @Override public void remover(Agenda agenda) throws Exception { this.negocioAgenda.remover(agenda); } @Override public void alterar(Agenda agenda) throws Exception { this.negocioAgenda.alterar(agenda); } @Override public ArrayList listarAgenda() throws Exception { return this.negocioAgenda.listarAgenda(); } @Override public ArrayList consultar(Agenda agenda) throws Exception { return this.negocioAgenda.consultar(agenda); } @Override public void cadastrar(Produto produto) throws Exception { this.negocioProduto.cadastrar(produto); } @Override public void remover(Produto produto) throws Exception { this.negocioProduto.remover(produto); } @Override public void alterar(Produto produto) throws Exception { this.negocioProduto.remover(produto); } @Override public ArrayList listarProduto() throws Exception { return this.negocioProduto.listarProduto(); } @Override public void cadastrar(Servico servico) throws Exception { this.negocioServico.cadastrar(servico); } @Override public void remover(Servico servico) throws Exception { this.negocioServico.remover(servico); } @Override public void alterar(Servico servico) throws Exception { this.negocioServico.alterar(servico);