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:
- Reduz a complexidade de uma api, liberando acesso a métodos de alto nível 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
return this.negocioCliente.listarCliente();
}
@Override
public ArrayList
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
return this.negocioFuncionario.listarFuncionario();
}
@Override
public ArrayList
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
return this.negocioAgenda.listarAgenda();
}
@Override
public ArrayList
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
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);
}
@Override
public ArrayList
return this.negocioServico.listaServico();
}
@Override
public void lancarVenda(Venda venda) throws Exception {
this.negocioVenda.lancarVenda(venda);
}
@Override
public void remover(Venda venda) throws Exception {
this.negocioVenda.remover(venda);
}
@Override
public ArrayList
return this.negocioVenda.HistorioVendas();
}
@Override
public ArrayList
return this.negocioVenda.consultar(venda);
}
@Override
public ArrayList
return this.negocioProduto.consultar(produto);
}
@Override
public ArrayList
return this.negocioServico.consultar(servico);
}
}