Design Pattern: Factory Method

Thiago D.
Let’s code Brasil
3 min readApr 15, 2020
Notebook pessoal de um engenheiro de software iti

No mundo da programação orientada a objetos, conhecida também como POO, temos à característica de poder descobrir o padrão de comportamento de vários tipos de projetos diferentes, porém tão parecidos estruturalmente, com problemas e acertos, deveras semelhantes.

Com isso surgiu os Design Patterns onde podemos abstrair esses comportamentos, características e padrões, utilizando padrões conceituais e estruturais para construir nossos projetos pessoais ou profissionais de forma assertiva.

Hoje e em alguns próximos posts irei falar sobre todos os Patterns que estudei e conheço, sendo eles os que utilizei tanto em projetos profissionais, como em meus projetos pessoais.

Como viram no título dessa publicação, o design pattern escolhido para começar essa série de textos, foi o Factory Method, em livre tradução Fábrica de métodos.

Esse padrão é conhecido pelo proposito de criação e seu escopo é de classe. Certo, você deve estar se perguntando o que isso significa?

Significa que o objetivo dele é conseguir criar uma “Fábrica” de classes.
Em tempo de execução faremos com que, nosso algorítimo tome a decisão de a qual tipo uma classe x pertence. Para que isso aconteça, o nosso Factory Method dispõe de uma interface, e somente as suas subclasses que decidirão qual a classe concreta deverá ser instanciada.

Gosto de lembrar de uma frase que li em Design Patterns com c#: Aprenda padrões de projeto com os games, que exemplifica muito bem esse Pattern:

Abstração não deve depender de detalhes, detalhes são quem deve depender de abstrações.

Depois dessa breve explicação, vamos por a mão na massa? ops, no código rs.

Let’s Code:

Crie um projeto console, dentro dele você vai criar uma interface com um método que suas classes vão implementar assim que herdarem sua interface.
E então você vai começar a criar as classes de implementação, no nosso caso serão 3, uma para cada personagem; Chun li, Ryu e Ken.

Obs: vou mostrar somente essa implementação de classe, pois as demais são com a mesma estrutura, sinta-se a vontade para criar quantas achar necessário.

Com as Subclasses criadas, agora devemos criar uma nova classe, essa terá a logica de comportamento do design pattern Factory Method, essa classe, dispõe de um método Escolher_Personagem, que sera responsável por orquestrar qual das subclasses de personagem será instanciada.

Criamos o método Escolher_Personagem, dentro da Classe FactoryMethod, usamos uma implementação bem simples; onde recebemos o nome do personagem por um parâmetro do tipo string e com um switch case, apontamos qual classe instanciar e retornar.

Dentro do método main, instanciamos o objeto de orquestração, intitulado de fm, então criamos as opções para que o usuário digite o nome do personagem que ele quer jogar, e atribuímos esse dado, para uma variável local chamada de “escolha”, que utilizamos a seguir, passando como parâmetro do nosso método do objeto fm, o Escolher_Personagem, lembrando que esse método vai abstrair a lógica para que a instância do personagem Chun lin seja a escolhida.

Feito os passos anteriores, finalizamos nossa estrutura.

Agora vamos utiliza-la.

Pronto, agora executamos o projeto e temos as opções de escolher o personagem.

Vamos escolher a Chun li e quando a escolhemos, nos bastidores da nossa aplicação, o algorítimo do factory method vai trabalhar com o nosso aplicativo executando, e então vai instanciar o objeto dela.

Com isso recebemos a mensagem do resultado final:

Você vai jogar com a Chun li.

Com esse post, você aprendeu criar um programa que pode crescer com vários outros personagens, e que, ficou super fácil de dar manutenção, pois utilizando o Factory Method, podemos instanciar cada um deles dinamicamente em tempo de execução.

Essa abstração pode ajudar você em muitos outros tipos de projetos, espero que com esse novo aprendizado, você possa contribuir com muita performance nos seus trabalhos e projetos pessoais.

Até uma próxima!!

Don’t stop learning.

Repositório com o projeto open source: https://bit.ly/3bTAmX0

Sinta-se a vontade para estudar o código fonte, abrir issues ou fazer pull requests.

--

--