Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. OOP
Code

Padrões de design: O simples padrão Factory(fábrica)

by
Difficulty:IntermediateLength:ShortLanguages:
This post is part of a series called Design Patterns in PHP.
Design Patterns: The Strategy Pattern
Design Patterns: The Command Pattern

Portuguese (Português) translation by Francisco Sousa (you can also view the original English article)

Quando pensas numa fábrica, o que vem a tua cabeça? Para mim, é um local onde as coisas são criadas – isto é um local centralizado onde as coisas são produzidas. Mais tarde a entrega do produtos é feita pela fábrica baseado numa ordem.

Vamos assumir que estás a requisitar um carro. A fábrica irá criar um baseado nas especificações de trabalho dessa ordem e irá então entregar uma vez que esteja completo.

Assim como os seu homólogos do mundo real, uma fábrica de software(isto é, software que implementa o padrão de design factory(fábrica), é um objeto que é responsável por criar e entregar outros objetos baseados nos parâmetros de entrada.

Existem três variações do padrão factory(fábrica):

  1. Padrão simples Factory(fábrica). Este permite interfaces para criar objetos sem expor a criação lógica para o cliente.
  2. Padrão método Factory(fábrica). Este permite interfaces para criar objetos, mas permite subclasses para determinar qual classe instanciar.
  3. Padrão abstrato Factory(fábrica). Ao contrários dos dois padrões acima, uma fábrica abstrata é uma interface para criar objetos relacionados sem especificar/expor as suas classes. Nós podemos também dizer que providencia um objeto de outra fábrica que é responsável por criar os objetos necessários.

Problema

Vamos assumir que tens uma classe carro que contêm todas as propriedades e métodos relevantes de um automóvel. Na sua forma mais básica, irias criar desta forma:

Imediatamente, com o passar do tempo existe a necessidades de algumas alterações da forma como o objeto Carro é criado. Nós necessitamos de criar objetos da classe que são baseados no tipo de carrinho em vez de apenas um Carro. Assim tens que fazer alterações em todos os sítios onde crias-te um objeto da classe Carro. 

Mas, com o passar do tempo, haverá inevitavelmente a necessidade de alterações na forma como o objeto Carro é criado. Por exemplo, nós temos que criar classes baseadas no tipo do carro em vez de um simples carro.

Em vez de fazer isso, seria uma melhor decisão criar uma classe que implementa o padrão Factory(fábrica). 

Solução

Na secção anterior, reconhecemos que estávamos a criar um objeto do tipo carro usando a keywordnew. Mais tarde, é decidido criar um objeto da classe Carro, mas baseado no tipo de Carro como Sedan, SUV, etc.

Entretanto devemos colocar o código do tipo de Carro na classe criada em todos os sítios onde possa ser necessário ou para implementar Factory(fábrica) de uma forma efetiva. Por favor consulta o bloco de código abaixo o qual mostra a implementação do simples padrão Factory(fábrica).

Na classe acima, podes ver que temos um método estático disponível, o qual é responsável por criar um objeto baseado no tipo que tu passas. Agora necessitamos de uma classe concreta de diferentes tipos de carro, como a que nós temos abaixo:

Neste momento, nós temos as nossa classes factory(fábrica) e concrete(concreta) prontas para ser usadas, vamos praticar para criar os tipos de carros necessários .

Adição de uma nova classe

A adição de uma nova classe é simples: Cria uma classe concreta e está pronto. Por exemplo:

Conclusão

No que diz respeito ao padrão factory(fábrica), considera o uso da keyword new prejudicial. Factory(fábrica) permite-nos ter uma localização centralizada onde todos os nossos objetos são criados.

Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no Twitter!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.