Dando continuidade a série de publicações sobre padrões de
projetos, hoje falaremos sobre o Abstract
Factory.
Considere uma aplicação onde eu possa ter múltiplas
interfaces gráficas, a principio apenas duas,
mas que eu possa adicionar quantas eu quiser. Devemos pensar em fazer
isso da forma mais escalável possível, é aí que entra um padrão de Projeto: Abstract Factory.
Criarei dois tipos de interfaces distintas: “KDE” e “Gnome”.
A idéia é que a aplicação não chame diretamente as classes
concretas, e que a adição ou remoção de um tipo de interface dê o menor
trabalho possível, portanto vamos criar uma classe abstrata para que a classe
cliente que necessitar de uma janela, por exemplo, não saiba se a janela é de “KDE”
ou “Gnome”, ela tem de saber apenas que é uma janela.
Temos
o seguinte diagrama:

As classes KDEFactory e GnomeFactory herdam de
AbstractGui, ambas tem dependência da Classe AbstractJanela e AbstractBotao,
porém não falaremos sobre isso agora.
A classe AbstractGui irá decidir, em tempo de
execução, qual a interface que deverá ser instanciada.
Temos então, os métodos sobrescri
...