Factory Method
Factory Method(Método de Fábrica) é um padrão de projeto que visa encapsular a criação de um objeto em um método.[1].
Factory Method é provavelmente um dos padrões mais utilizados porque ele é muito natural. Ele é usado, muitas vezes, sem consciencia de que está sendo usado um padrão.
O problema
Você precisa criar um objeto mas você não quer usar a diretiva new diretamente ou não sabe qual classe instanciar.
A solução
Algumas razões existem para que não queria utilizar new diretamente. A primeira, e mais óbvia, é não saber que classe de objeto instanciar.
Isso é comum numa aplicação bem desenhada onde variáveis são estruturadas com base em interfaces. Assim, vários tipos de objetos diferentes podem ser associadas a essa variável.
Uma outra razão é a necessidade de inicializar o objeto instanciado antes de ser atribuido à variável. Importante notar
que esta inicialização não depende do ambiente onde o objeto será utilizado, mas apenas da estrutura do próprio objeto.
Implementação
A implementação de Factory Method é tão simples quanto fazer new dentro de um método.
Não existe nenhum secreto.
Em particular o método pode ser estático. Neste caso a criação do objeto é feita num escopo diferente da criação feita dentro de um método de instancia. Mesmo assim, se trata do mesmo padrão.
Padrões relacionados
O padrão Factory Method nasce da aplicação direta do principio do encapsulamento e se relaciona
a muitos outros padrões. O padrão Factory pode ser entendido como uma extenção do padrão Factory Method
onde é adicionado polimorfismo ao método de criação.
O padrão Factory Method está relacionado a todos os outros padrões que conduzam algum tipo de construção
encapsulada de objetos. Além de Factory os padrões Iterator, Singleton , Builder,
Prototype e Bridge- para citar alguns – estão relacionados ao padrão Factory Method.
Referências
| [1] | Design Patterns: Elements of Reusable Object-Oriented SoftwareErich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides Design Patterns: Elements of Reusable Object-Oriented Software 1995 Addison-Wesley |
Licença
![]() |
Sérgio Taborda
Este trabalho é licenciado sob a |
