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