quarta-feira, 30 de junho de 2010

Façade (GoF - padrão estrutural)

O que é ?
É quando temos uma interface simplificada diante de um subsistema de classes, fazendo o com que o sistema seja mais fácil de usar. Fazendo o cliente acessar a façade e, não a base diretamente.

Serve para abstrair certas regras de negócio e, encapsular operações.

Caso de uso:
Usamos façade quando queremos ter uma interface única para um conjunto de interfaces de um subsistemas.

Exemplo: Em um cenário: dirigir e estacionar um carro.

Vamos criar uma classe para cada objeto do carro:
exemplo:

Classe Motor, podendo ter os seguintes métodos:
ligar();
desligar;

Classe CintoSeguranca, podendo ter os seguintes métodos:
travado();
destravado();

Imagine se você precisar andar de carro, você teria que fazer o seguinte:
Motor.ligar();
CintoSeguranca.travado():

...e a mesma idéia para estacionar:
Motor.desligar();
CintoSeguranca.destravar():

Em um cenário com muitas classes seria muito trabalhoso.

Mas quando usamos façade simplificamos o serviço, ficando desta maneira:

Vamos ter uma classe façade chamada "Class CarroFacade", com os seguinte métodos:

dirigir():
estacionar():

sendo assim, estes métodos que irão instanciar as classes que serão necessárias para dirigir e/ou estacionar um carro.


Estrutura:













Vantagens:
  • Maior abstração da implementação do subsistema do cliente, deixando o subsistema mais fácil de usar.

  • Deixa um baixo acoplamento entre o subsistema e o cliente baixo, porque ao invés do cliente conhecer todos os subsistemas, ele conhece apenas a façade dele, permitindo que você mude as classes do subsistema sem afetar os clientes.

Desvantagens:
  • O sistema pode perder sua consistência se o cliente acessar diretamente a base.

Referências:
Head First Design Patterns

Nenhum comentário:

Postar um comentário

DÚVIDAS - CRITICAS - SUGESTÕES