Olá! Faz um tempo que não mexo com perl. Encontrei perdido um arquivo com esse exemplo que fiz em 2008, segundo a data de última modificação. Então, decidi dar continuidade aos posts de design patterns. Esse padrão é bem interessante, poderia ser traduzido para Fachada.
Eu gosto dessa tradução, porque traduz bem direitinho o que ele representa, é uma fachada para "esconder" chamadas de vários métodos de objetos diferentes atrás de um mesmo método. Pense assim:
Toda vez que eu aperto o botão de uma máquina de café e pedir um mocacchino, acontece a mesma coisa:
- Moe-se o café
- Pega-se um copo
- Esquenta-se a água
- Passa-se o café
- Coloca-se o café passado no copo
- Coloca-se o chocolate
- Coloca-se o leite
- Apita pra dizer que está pronto
Se olharmos isso com a visão de um pojetista, vemos que temos várias responsabilidades e que não podemos deixar tudo numa mesma classe, como por exemplo:
- Responsável por moer o café
- Responsável por colocar algo no copo
- Responsável por pegar 1 copo novo
- Responsabilidade de saber quanto de cada ingrediente por no copo
- Responsabilidade de apitar e escrever nos leds
Enfim, para que o código seja organizado, precisamos distribuir as responsabilidades de acordo com as necessidades e obrigações de cada classe. Porém, cada vez que o botão for pressionado, seria muito cruel ter que chamar várias classes e executar esses métodos que selecionam o copo, moem o grão, etc.
Para esses casos foi pensando o Facade Pattern, ou seja, a Fachada. Todo aquele algoritmo descrito na primeira lista acima, é encapsulado dentro de uma classe específica para a máquina de café, dentro do método pressionaBotao, por exemplo. Chamando o método, ele se encarrega de interagir com os objetos de seleção do copo, do cálculo da quantidade de ingredientes, etc.