terça-feira, 9 de novembro de 2010

Façade Pattern



Definição

Este padrão de projeto fornece uma interface unificada para um conjunto de interfaces em um subsistema. Ele define uma interface de alto nível que torna o subsistema fácil de usar. Um façade é um objeto que fornece uma interface simplificada para um conjunto maior de código, como uma biblioteca de classes.

Quando usar

O façade pode ser usado para fazer uma biblioteca de software fácil de usar e
compreender, uma vez que a fachada possui métodos adequados para tarefas comuns. Por essa mesma razão, pode tornar o código que usa a biblioteca mais legível. O padrão também pode ser usado para reduzir as dependências de código fora do funcionamento interno de uma biblioteca, já que a maioria usa o código de façade que permite mais flexibilidade ao desenvolvimento do sistema. Um cenário de uso final é onde podemos envolver várias APIs mal
projetadas com uma única API bem concebida.

Benefícios

O principal benefício com o Facade pattern é que nós podemos combinar muitas complexidades, exige métodos e blocos de código em um único método que executa uma tarefa complexa e recorrente. Além de tornar o código mais fácil de usar e compreender, reduz as dependências de código entre ibliotecas ou pacotes, faz  os programadores mais aptos considerarem a idéia antes de escrever um novo código que expõe o funcionamento interno de uma biblioteca ou um pacote. Além disso, desde o façade pattern, é feito uma ligação fraca entre o código do cliente e outros pacotes ou bibliotecas o que permite variar os componentes internos desde que o cliente não chame-os  diretamente.

Desvantagens / consequências

Uma desvantagem é que temos muito menos controle do que acontece além da superfície. Além disso, se algumas classes necessitam de pequenas variações para a execução de metodos façade pode se acabar em  uma confusão.




Exemplo

Considere o gráfico acima, onde a classe Client faz chamadas para a classe
BankAccountFacade. A classe Facade usa as classes AccountManager, SecurityManager, AccountReference e BankAccount para executar as ações apropriadas. Ao utilizar o padrão Facade, ocorre a separação do código do cliente dos detalhes de implementação e de segurança na execução de tarefas
relacionados com a conta bancária.


Um comentário: