O padrão Fachada
Autor: Edson Gouveia  | Publicado: 2012-07-10T23:40:00-07:00





&nbsp; &nbsp; &nbsp;O Padrão Facade que é simples de ser aplicado e que traz grandes benefícios aos projetos é dito como sendo um padrão estrutural e está entre os 23 padrões de projeto do GoF (Gang of Four).Entende-se por padrão estrutural todo padrão de projeto que trata da associação entre classes e objetos.Como o nome sugere Facade, é realmente uma fachada, podemos fazer a seguinte analogia, quando caminhamos em frente a um prédio com uma bela fachada, vemos as belas janelas as paredes bem decoradas, ou seja um ambiente bem amigável, e ignoramos toda a complexidade por trás da obra, a quantidade de salas, todas as empresas que estão neste prédio, deste modo o Facade também age nos projetos de software, dentre seus benefícios, alguns são:&nbsp;- Reduz a complexidade de uma api, liberando acesso a métodos de alto nível encapsulando os demais.&nbsp;- Produz uma interface comum e simplificada.&nbsp;- Pode encapsular uma ou mais interfaces mal projetadas em uma mais concisa.

&nbsp;- Reduz drasticamente o acoplamento entre as camadas do projeto.


Veja o Exemplo da Classe Fachada!

package Camadas;

/*
&nbsp;* To change this template, choose Tools | Templates
&nbsp;* and open the template in the editor.
&nbsp;*/
import Classes.Agenda;
import Classes.Cliente;
import Classes.Funcionario;
import Classes.Produto;
import Classes.Servico;
import Classes.Venda;
import java.util.ArrayList;

/**
&nbsp;*
&nbsp;* @author GOVEIA
&nbsp;*/
public class Fachada implements
&nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; InterfaceAgenda,
&nbsp; &nbsp; &nbsp; &nbsp; IntefaceCliente,
&nbsp; &nbsp; &nbsp; &nbsp; InterfaceFuncionario,
&nbsp; &nbsp; &nbsp; &nbsp; InterfaceProduto,
&nbsp; &nbsp; &nbsp; &nbsp; InterfaceServico,
&nbsp; &nbsp; &nbsp; &nbsp; InterfaceVenda{

&nbsp; &nbsp; private NegocioCliente negocioCliente;
&nbsp; &nbsp; private NegocioFuncionario negocioFuncionario;
&nbsp; &nbsp; private NegocioProduto negocioProduto;
&nbsp; &nbsp; private NegocioServico negocioServico;
&nbsp; &nbsp; private NegocioAgenda negocioAgenda;
&nbsp; &nbsp; private NegocioVenda negocioVenda;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; private static Fachada instancia;

&nbsp; &nbsp; public static Fachada obterInstancia() {
&nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; if (instancia == null) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; instancia = new Fachada();
&nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; return instancia;
&nbsp; &nbsp; }

&nbsp; &nbsp; private Fachada() {

&nbsp; &nbsp; &nbsp; &nbsp; this.negocioCliente = new NegocioCliente();
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioFuncionario = new NegocioFuncionario();
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioProduto = new NegocioProduto();
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioServico = new NegocioServico();
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioAgenda = new NegocioAgenda();
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioVenda = new NegocioVenda();

&nbsp; &nbsp; }

&nbsp; &nbsp; // Fachada Cliente
&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void cadastrar(Cliente cliente) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioCliente.cadastrar(cliente);

&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void remover(Cliente cliente) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioCliente.remover(cliente);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void alterar(Cliente cliente) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioCliente.alterar(cliente);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public ArrayList listarCliente() throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; return this.negocioCliente.listarCliente();

&nbsp; &nbsp; }

&nbsp; &nbsp;@Override
&nbsp; &nbsp; public ArrayList consultar(Cliente cliente) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; return this.negocioCliente.consultar(cliente);
&nbsp; 
&nbsp; &nbsp; }

&nbsp; 
&nbsp; &nbsp; // Fachada Funcionario
&nbsp; 

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void cadastrar(Funcionario funcionario) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioFuncionario.cadastrar(funcionario);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void remover(Funcionario funcionario) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioFuncionario.remover(funcionario);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void alterar(Funcionario funcionario) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioFuncionario.alterar(funcionario);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public ArrayList listarFuncionario() throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; return this.negocioFuncionario.listarFuncionario();
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public ArrayList consultar(Funcionario funcionario) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; return negocioFuncionario.consultar(funcionario);
&nbsp; &nbsp; }

&nbsp; 
&nbsp; 
&nbsp; 
&nbsp; 
&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void cadastrar(Agenda agenda) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp;this.negocioAgenda.cadastrar(agenda);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void remover(Agenda agenda) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp;this.negocioAgenda.remover(agenda);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void alterar(Agenda agenda) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioAgenda.alterar(agenda);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public ArrayList listarAgenda() throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp;return &nbsp;this.negocioAgenda.listarAgenda();
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public ArrayList consultar(Agenda agenda) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp;return &nbsp; this.negocioAgenda.consultar(agenda);
&nbsp; &nbsp; }

&nbsp; 
&nbsp; 
&nbsp; 
&nbsp; 
&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void cadastrar(Produto produto) throws Exception {
&nbsp; &nbsp; &nbsp; this.negocioProduto.cadastrar(produto);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void remover(Produto produto) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioProduto.remover(produto);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void alterar(Produto produto) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioProduto.remover(produto);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public ArrayList listarProduto() throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; return &nbsp;this.negocioProduto.listarProduto();
&nbsp; &nbsp; }


&nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp;@Override
&nbsp; &nbsp; public void cadastrar(Servico servico) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp;this.negocioServico.cadastrar(servico);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void remover(Servico servico) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; this.negocioServico.remover(servico);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void alterar(Servico servico) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp;this.negocioServico.alterar(servico);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public ArrayList listaServico() throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp;return &nbsp;this.negocioServico.listaServico();
&nbsp; &nbsp; }

&nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp;@Override
&nbsp; &nbsp; public void lancarVenda(Venda venda) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp;this.negocioVenda.lancarVenda(venda);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public void remover(Venda venda) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp;this.negocioVenda.remover(venda);
&nbsp; &nbsp; }
&nbsp; 
&nbsp; &nbsp; @Override
&nbsp; &nbsp; public ArrayList HistorioVendas() throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; return this.negocioVenda.HistorioVendas();
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public ArrayList consultar(Venda venda) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; return &nbsp;this.negocioVenda.consultar(venda);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public ArrayList consultar(Produto produto) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp; return this.negocioProduto.consultar(produto);
&nbsp; &nbsp; }

&nbsp; &nbsp; @Override
&nbsp; &nbsp; public ArrayList consultar(Servico servico) throws Exception {
&nbsp; &nbsp; &nbsp; &nbsp;return &nbsp;this.negocioServico.consultar(servico);
&nbsp; &nbsp; }

&nbsp; 
&nbsp;}
&nbsp; 
&nbsp; 
&nbsp; 



&nbsp; 
&nbsp; 
&nbsp; 
&nbsp;