~/Explorando o padrão de design - factory

Introdução:

Seja bem-vindo devs ao segundo post da série padrões de design em projetos de software. Neste artigo, vamos aprofundar nosso conhecimento em mais um padrão de design amplamente utilizado: o padrão de design Factory. Assim como o Adapter, o Factory é um padrão de design criacional que proporciona uma solução elegante para a criação de objetos em uma aplicação. Vamos explorar em detalhes como esse padrão funciona e descobrir suas diversas aplicações em projetos de software.

Confira a lista de todos os posts da série:

Visão geral:

O padrão de design Factory é utilizado quando precisamos criar objetos de uma mesma família, porém com diferentes implementações, de forma flexível e sem a necessidade de especificar explicitamente as classes concretas. Ele define uma interface para a criação de objetos, delegando a decisão sobre qual objeto concreto instanciar para as subclasses.

Quando utilizar o padrão Factory:

O padrão Factory é útil em diversas situações, como por exemplo:

  • Quando queremos encapsular a lógica de criação de objetos em uma classe específica, ao invés de espalhá-la por toda a aplicação.
  • Quando desejamos criar objetos de uma mesma família, mas com diferentes implementações, de forma transparente para o cliente.
  • Quando queremos desacoplar o código cliente das classes concretas, permitindo a fácil extensão e adição de novos tipos de objetos.

Como funciona o padrão Factory:

O padrão Factory é baseado em um método de fábrica (factory method) definido em uma classe abstrata ou interface. As subclasses concretas são responsáveis por implementar esse método e retornar uma instância do objeto desejado. Dessa forma, o código cliente pode utilizar a interface da classe abstrata ou interface para criar objetos sem conhecer as implementações concretas.

Exemplo de Factory utilizando a linguagem Python:

Vamos agora ver um exemplo prático de como podemos aplicar o padrão Factory em uma aplicação utilizando a linguagem Python. Suponha que temos um sistema de gerenciamento de produtos, onde temos diferentes tipos de produtos (por exemplo, eletrônicos, móveis, vestuário) e cada tipo de produto possui uma forma específica de criação. Podemos criar uma classe abstrata chamada ProductFactory que define o método factory_method() responsável pela criação dos objetos. Em seguida, podemos implementar subclasses concretas dessa classe abstrata para cada tipo de produto, onde cada uma delas irá implementar o método factory_method() de acordo com as características do respectivo produto.

from abc import ABC, abstractmethod

class ProductFactory(ABC):
    @abstractmethod
    def factory_method(self):
        pass

class ElectronicsFactory(ProductFactory):
    def factory_method(self):
        return ElectronicsProduct()

class FurnitureFactory(ProductFactory):
    def factory_method(self):
        return FurnitureProduct()

class ClothingFactory(ProductFactory):
    def factory_method(self):
        return ClothingProduct()

# Uso do Factory
electronics = ElectronicsFactory().factory_method()
furniture = FurnitureFactory().factory_method()
clothing = ClothingFactory().factory_method()

Conclusão:

O padrão de design Factory é uma ferramenta poderosa para a criação de objetos em uma aplicação, proporcionando flexibilidade e desacoplamento do código cliente. Ele permite a criação de objetos de uma mesma família de forma transparente, facilitando a manutenção e extensão do código. Ao aplicar esse padrão corretamente, podemos obter um código mais modular, flexível e de fácil manutenção.

Gostaria de saber também a sua opinião a respeito desse assunto, fica aqui meu contato na rede matrix e/ou se preferir sinta-se à vontade para me enviar um e-mail em resposta a qualquer questão nesse post. Se você quiser criptografá-lo, aqui está minha chave pgp

Que a força esteja com você.


Published May 12, 2023 by f0rmig4