23 de março de 2010
Design Patterns – Patterns Criacionais: Factory Method
escrito por Ruppel, enquanto ele mesmoA terceira pattern do livro é bem conhecida: é uma Factory. A factory tem 3 usos bem claros:
- Você está criando um framework no qual você precisa instanciar uma classe que estará fora do framework.
- Você quer que uma subclasse especifique qual tipo de produto a sua classe pai (ou mãe?) deve criar
- Você quer concentrar o conhecimento de quais são as classes concretas (implementações) usadas no seu sistema em um único lugar.
Para solucionar esses três casos distintos, usa-se a simples idéia de ter uma classe abstrata com um método CreateProduct() que será implementado por sua filha.
Repare que quem faz uso do FactoryMethod é a própria classe Creator, mas esse método será implementado apenas pelo ConcreteCreator.
Uma consequência interessante da FactoryMethod tratada no livro é permitir a manipulação de hierarquias paralelas de classes. O exemplo dado é de elementos gráficos que possam ser manipulados (redimensionados, cortados, arrastados), como Linhas, Textos e Imagens. Cada um desses objetos é manipulado diferentemente, mas através de uma mesma interface, a interface Manipulator.
Assim, você define na interface comum a esses produtos (no caso seria uma interface ElementosGráficos) um método CreateManipulator. E a classe Linha irá criar um ManipuladorDeLinha, a classe Texto um ManipuladorDeTexto e a Imagem um ManipuladorDeImagem. Criando, dessa forma, as duas hierarquias paralelas: a de elementos gráficos e a de manipuladores desses elementos.
