Padrões GoF – Factory Method
1
Factory Method
• Quando uma parte de um SSOO precisa dos serviços de um
objeto, essa parte envia mensagem para este último.
• No entanto para que um objeto receba mensagens, ele deve
existir. Não faz sentido falar em “envio de mensagens” para
um objeto que não existe.
• Para um objeto existir, ele deve ser instanciado a partir de uma
classe.
• Instanciar uma classe significa criar um objeto dessa classe.
– Fisicamente falando, isso significa (1) alocar espaço em memória para
armazenar o objeto e (2) iniciar o seu estado (ou seja, os valores de seus
atributos).
• Após a instanciação, o objeto pode prover serviços para outros
objetos. (ou seja, para sua região de código cliente)
Factory Method
• Entretanto, a operação de instanciação de um objeto pode ser
bastante complexa.
• Além disso, pode ser que não seja adequado fazer com que
uma região de código que necessite de um serviço tenha uma
referência direta para a classe (objeto) que o fornece.
– Uma razão para isso pode ser o fato de que a forma de implementar tal
serviço ser instável, no sentido de precisar ser alterada no futuro.
– Se a região de código instanciar diretamente a classe que lhe fornece
determinado serviço, essa região fica definitivamente acoplada a essa
classe fornecedora e a sua forma específica de prover o serviço
requerido.
• Uma forma de resolver o problema descrito acima é através de
uma fábrica de objetos...
Factory Method
•
Uma fábrica de objetos corresponde a uma classe cuja
responsabilidade é criar outros objetos, quando requisitada.
• Essa fábrica retorna o objeto criado na forma de uma
referência para uma superclasse abstrata ou para uma interface.
– Dessa maneira, a região cliente, que previamente criava o objeto para
lhe prover o serviço, agora fica dependente desse serviço através de um
acoplamento abstrato.
• Com efeito, a classe que realmente fornece o serviço requerido
pode ser substituída sem que a região de código cliente precise
de modificação.
Factory Method
• Essa é a solução correspondente ao padrão Factory Method,
cujo objetivo é definir uma interface para instanciar objetos.
• Note que a fábrica de objetos precisa fazer referência às
classes concretas cujos objetos fornecem o serviço requerido, o
que é um exemplo de acoplamento concreto.
• Entretanto, essa referência fica localizada em uma região de
código particular (na fábrica de objetos) e é conseqüentemente
aceitável.
• Note também que quaisquer mudanças nas classes que
fornecem o serviço em questão ficam localizadas à fábrica de
objetos e não afetam os clientes.
Factory Method
• Outro aspecto importante sobre o padrão Factory Method é
que sua utilização adiciona complexidade ao projeto.
– Na verdade, essa é uma tônica na maioria dos padrões de projeto: eles
adicionam flexibilidade às custas de adicionarem complexidade à
solução.
• A decisão por utilizar esse padrão deve levar em consideração
o fato de a classe que fornece o serviço ser realmente
suscetível a mudanças futuras.
• Em caso contrário, a referência (instanciação) direta da classe
que fornece o serviço (em vez de usar o Factory Method) é
uma alternativa mais viável.
Factory Method - Estrutura
Download

Padrões GoF - Facto.. - PUC-Rio