The Factory Method Design Pattern in Python

Introduction

In this article, we’ll be diving into the Factory Method Design Pattern, implemented in Python.Padrões de Design definem soluções testadas e testadas para vários problemas recorrentes no desenvolvimento de software. Eles não representam o código real, mas sim as maneiras pelas quais podemos organizar o nosso código para os melhores resultados.

num mundo de recursos limitados, os padrões de Design ajudam-nos a alcançar o maior número de resultados com a menor quantidade de recursos usados. É também importante notar que os padrões de Design não se aplicam a todas as situações e é crucial avaliar o problema em mãos, a fim de escolher a melhor abordagem para esse cenário específico.

os padrões de Design são divididos em algumas categorias amplas, embora principalmente em padrões Criacionais, padrões estruturais e padrões comportamentais.

the Factory Method pattern is a Creational Design Pattern.

the Factory Method Design Pattern

Definition

The Factory Method is used in object-oriented programming as a means to provide factory interfaces for creating objects. Estas interfaces definem a estrutura genérica, mas não inicializam objetos. A inicialização é deixada para subclasses mais específicos.

a classe/interface pai abriga todo o comportamento padrão e genérico que pode ser compartilhado através de subclasses de diferentes tipos. A subclasse é por sua vez responsável pela definição e instanciação do objeto baseado na superclasse.

Motivação

A principal motivação por trás do Método de Fábrica Padrão de Projeto é melhorar o acoplamento fraco no código, através da criação de uma classe abstrata que vai ser usado para criar diferentes tipos de objetos que compartilham algumas características comuns e funcionalidade.

isto resulta em maior flexibilidade e reutilização de código porque a funcionalidade compartilhada não será reescrita tendo sido herdada da mesma classe. Este padrão de design também é conhecido como um construtor Virtual.

o padrão de projeto de método de fábrica é comumente usado em bibliotecas, permitindo aos clientes escolher que subclasse ou tipo de objeto criar através de uma classe abstrata.

a Factory Method will receive information about a required object, instanciate it and return the object of the specified type. Isto dá à nossa aplicação ou biblioteca um único ponto de interação com outros programas ou pedaços de código, encapsulando assim a nossa funcionalidade de criação de objetos.

implementação do método de fábrica

nosso programa vai ser uma biblioteca usada para lidar com objetos de forma em termos de criação e outras operações, tais como adicionar cor e calcular a área da forma.

os usuários devem ser capazes de usar a nossa biblioteca para criar novos objetos. Podemos começar por criar formas individuais e aproveitá-las como está, mas isso significaria que um monte de lógica compartilhada terá de ser reescrita para cada forma que temos disponível.

o primeiro passo para resolver esta repetição seria criar uma classe de forma pai que tem métodos como calculate_area() e calculate_perimeter(), e propriedades como dimensões.

os objectos de forma específica herdarão então da nossa classe de base. Para criar uma forma, precisamos identificar que tipo de forma é necessária e criar a subclasse para ela.

Vamos começar por criar uma classe abstrata para representar de uma forma genérica:

Esta é a classe base para todas as nossas formas. Vamos em frente e criar várias formas concretas, mais específicas:

até agora, nós criamos uma classe abstrata e estendemo-la para atender diferentes formas que estarão disponíveis em nossa biblioteca. A fim de criar os diferentes objetos de forma, os clientes terão que saber os nomes e detalhes de nossas formas e realizar separadamente a criação.

é aqui que o método de fábrica entra em jogo.

o padrão de design do método de fábrica irá ajudar-nos a abstrair as formas disponíveis do cliente, ou seja, o cliente não tem de saber todas as formas disponíveis, mas apenas criar o que eles precisam durante o período de execução. Também nos permitirá centralizar e encapsular a criação do objeto.

vamos conseguir isso criando um ShapeFactory que será usado para criar as classes de forma específicas com base na entrada do cliente:

esta é a nossa interface para a criação. Nós não chamamos os construtores de classes de concreto, nós chamamos a fábrica e pedimos-lhe para criar uma forma.

nosso ShapeFactory funciona recebendo informações sobre uma forma como um nome e as dimensões necessárias. Nosso método de fábrica create_shape() será então usado para criar e devolver objetos prontos das formas desejadas.

o cliente não tem que saber nada sobre a criação do objeto ou detalhes. Usando o objeto de fábrica, eles podem criar objetos com um mínimo de conhecimento de como funcionam:

com este código irá resultar em:

Ou, poderíamos construir uma outra forma:

o Que vale a pena mencionar é que, além de o cliente não ter que saber muito sobre o processo de criação – quando nós gostaríamos de instanciar um objeto, nós não chamar o construtor da classe. Pedimos à fábrica para fazer isso por nós com base na informação que passamos para a função create_shape().

Prós e Contras

Vantagens

Uma das grandes vantagens de usar o Método de Fábrica padrão de design é que nosso código se torna flexível, em que a maioria dos componentes de nosso código são insensíveis a outros componentes da mesma base de código.

isto resulta em código que é fácil de entender e testar e adicionar mais funcionalidade a componentes específicos sem afetar ou quebrar todo o programa.

the Factory Method design pattern also helps sustain the Single Responsibility Principle where classes and objects that handle specific functionality resulting in better code.

Cons

criação de mais classes eventualmente leva a menos legibilidade. Se combinado com uma fábrica abstrata (fábrica de fábricas), o código em breve se tornará descritivo, embora, mantível.

Conclusion

In conclusion, the Factory Method Design Pattern allows us to create objects without specifying the exact class required to create the particular object. Isto permite-nos dissociar o nosso código e aumenta a sua reutilização.

é importante notar que, tal como qualquer outro padrão de design, é apenas adequado para situações específicas e não para todos os cenários de desenvolvimento. Uma avaliação da situação em mãos é crucial antes de decidir implementar o padrão de projeto do método de fábrica para colher os benefícios do padrão.

Deixe uma resposta

O seu endereço de email não será publicado.