Como Implementar O Padrão de Projeto Builder em Python

Este artigo tem por objetivo apresentar soluções e utilizações para o padrão de projeto Builder em Python, a fim de que possamos saber quando e porque utilizá-lo corretamente.

Primeiramente nós iremos ver como o segundo pattern criacional do gang of four funciona, quais são os problemas que ele visa resolver, para que depois possamos ver diferentes implementações do Builder em Python.

Série Design Patterns em Python

Antes de mais nada, eu gostaria de deixar aqui o repositório no github que eu criei com os exemplos dessa série. Se acaso você queira conferir, basta acessar o link: https://github.com/ceb10n/design-patterns-with-python

O que é o Builder Pattern?

O padrão de projeto Builder tem por objetivo separar a construção de objetos complexos de sua representação, de tal forma que nós permita que diferentes representações sejam criadas a partir do mesmo processo de construção de um determinado objeto.




O padrão de projeto Builder possui os seguintes participantes:

  • Director
  • Builder
  • Concrete Builder
  • Product

O Produto de Uma Construção

O Product, ou produto, é o que será construído através do padrão Builder.


Imagine que você criará um Builder para carros complexos. O produto neste caso seria o próprio carro!

Definindo o Processo: Builder

O Builder definirá o processo pelo qual um determinado objeto passará para ser construído.




Colocando a Mão na Massa: Concrete Builder

O Concrete Builder é quem de fato realizará a criação do objeto complexo em questão.

O Diretor da Construção

A classe Diretor é quem efetivamente chamará a construção de um determinado objeto.


 




Implementando o Builder em Python

Agora que já vimos a definição, vamos ver uma visão um pouco mais realista do pattern Builder em Python.

Um Celular

Aproveitando a deixa do artigo sobre Abstract Factory, vamos utilizar o universo dos celulares neste artigo sobre o padrão Builder em Python.

Vamos agora definir o Produto, o que será construído com o nosso Builder.

O Arquiteto dos Celulares

Agora que sabemos qual é o produto, precisamos definir o ‘Builder’ do celular.

Ele será o responsável por definir o contrato para estabelecer o processo padronizado de criação de celulares, independente do modelo ou marca.

Criadores de Celular

Agora que definimos um processo para a criação de celulares, independente da marca e do modelo, nós precisamos implementar a criação de fato dos celulares.

Neste exemplo, nós construiremos um Builder para a Apple e pra Samsung.

Quem Manda

Agora vem a implementação do ‘Diretor’. É ele quem sabe como o builder funciona, e por isso será ele mesmo que chamará a construção do objeto.

Note que ele não precisa saber nada da implementação dos Builders, pois o que ele conhece é apenas o contrato estabelecido.

O Resultado

Agora nós já podemos testar os nossos builders.

O Pato Builder

Como eu falei no artigo anterior, nós podemos fazer uso do duck typing para evitar a criação das classes abstratas / contratos.

E Continuamos Sem Mudar Nada

E como era de se esperar, não precisamos mudar nada em nosso código.

Conclusão

Apesar dos padrões de projetos serem algo extremamente importante para todos nós desenvolvedores aprendermos, não é toda hora hora que iremos utilizá-los.

Um ponto muito importante para manter em mente é que os padrões de projetos do livro do GoF foram feitos em outra época, onde as linguagens mais populares como C++ e Smalltalk apresentavam impedimentos que o próprio Python não apresenta.

Então é comum utilizar-mos o padrão de projeto Builder em Python? Certamente não.

Aliás, acredito que nenhum dos padrões criacionais são muito populares em Python, pois a linguagem, além de extremamente poderosa, facilita a nossa vida!

E ai, gostou do padrão de projeto Builder?

Conseguiu imaginar alguma situação em que o Builder em Python ajude a sua vida?!

Não deixe de comentar as suas opiniões! Um grande abraço!




2 Comments

  1. Samir Ramos 11 de janeiro de 2019

Leave a Reply