Padrão de Fábrica
Quando o desenvolvimento de código, você pode instanciar objetos diretamente em métodos ou classes. Embora isto seja bastante normal, você pode querer adicionar uma abstração extra entre a criação do objeto e onde ele é usado em seu projeto.
você pode usar o padrão de fábrica para adicionar essa abstração extra. O padrão de fábrica é um dos padrões mais fáceis de entender e implementar.
adicionar uma abstração extra também permitirá que você escolha dinamicamente classes para instanciar com base em algum tipo de lógica.Antes da abstração, sua classe ou método criaria diretamente uma classe de concreto. Depois de adicionar a abstração de fábrica, a classe de concreto é agora criada fora da classe/método atual, e agora em uma subclasse.Imagine uma aplicação para projetar casas e a casa tem uma cadeira já adicionada no chão por padrão. Ao adicionar o padrão de fábrica, você pode dar a opção ao Usuário para escolher cadeiras diferentes, e quantos no tempo de execução. Em vez de a cadeira ser codificada no projeto quando ele começou, o usuário agora tem a opção de escolher.
adicionar esta abstração extra também significa que as complicações da instanciação de objetos extras podem agora ser escondidas da classe ou método que está usando.Esta separação também torna o seu código mais fácil de ler e documentar.
the Factory pattern is really about adding that extra abstraction between the object creation and where it is used. Isso lhe dá opções extras que você pode mais facilmente estender no futuro.
- Concreto Criador: A aplicação cliente, classe ou método que chama o Criador (método de fábrica).
- interface de Produto: A interface que descreve os atributos e métodos que a fábrica irá exigir para criar o produto/objecto final.
- Creator: The Factory class. Declara o método de fábrica que devolverá o objeto solicitado.Produto em betão: o objecto regressou da fábrica. O objeto implementa a interface do produto.
Fábrica de Diagrama UML
Código-Fonte
neste exemplo de conceito, o cliente quer um objeto chamado b
em Vez de criar b
diretamente no cliente, ele pede que o criador (de fábrica) para o objeto em vez disso.
The factory finds the relevant class using some kind of logic from the attributes of the request. Ele então pede à subclasse para instanciar o novo objeto que então retorna como uma referência de volta para o cliente que pede por ele.
./factory/factory_concept.py
"""
The Factory Pattern Concept
https://sbcode.net/python/factory/#factoryfactory_conceptpy
"""from abc import ABCMeta, abstractmethodclass IProduct(metaclass=ABCMeta):
"A Hypothetical Class Interface (Product)" @staticmethod
@abstractmethod
def create_object():
"An abstract interface method"class ConcreteProductA(IProduct):
"A Concrete Class that implements the IProduct interface" def __init__(self):
self.name = "ConcreteProductA" def create_object(self):
return selfclass ConcreteProductB(IProduct):
"A Concrete Class that implements the IProduct interface" def __init__(self):
self.name = "ConcreteProductB" def create_object(self):
return selfclass ConcreteProductC(IProduct):
"A Concrete Class that implements the IProduct interface" def __init__(self):
self.name = "ConcreteProductC" def create_object(self):
return selfclass Creator:
"The Factory Class" @staticmethod
def create_object(some_property):
"A static method to get a concrete product"
if some_property == 'a':
return ConcreteProductA()
if some_property == 'b':
return ConcreteProductB()
if some_property == 'c':
return ConcreteProductC()
return None# The Client
PRODUCT = Creator().create_object('b')
print(PRODUCT.name)
Output
python ./factory/factory_concept.py
ConcreteProductB
Factory Pattern Overview Video
exemplo de caso de Utilização
visitar padrões de concepção de fábrica em Python (sbcode.net) for an example use case of the Factory pattern.
um exemplo de caso de uso é uma interface de usuário onde o usuário pode selecionar a partir de um menu de itens, como cadeiras.
ao usuário foi dada uma escolha usando algum tipo de interface de navegação, e é desconhecido que escolha, ou quantos o usuário vai fazer até que a aplicação está realmente em execução e o usuário começa a usá-lo.
assim, quando o usuário selecionou a cadeira, a fábrica então toma alguma propriedade envolvida com essa seleção, como um ID, tipo ou outro atributo e, em seguida, decide qual subclasse relevante para instanciar, a fim de devolver o objeto apropriado.
Ver o gif acima para um muito gráfica exemplo de um exemplo real de utilizar o padrão de fábrica para retornar cadeira de objetos. O Painel Da esquerda contém Cadeiras, e quando você arrasta e larga uma cadeira para o painel da direita, ele chama a fábrica de Cadeiras para devolvê-lo uma cadeira.
Factory Pattern Use-case Video
resumo
- o padrão de fábrica é uma Interface que defende a criação do objeto final para uma subclasse.
- o padrão de fábrica é sobre a inserção de outra camada / abstração entre a instanciação de um objeto e onde em seu código ele é realmente usado.
- não se sabe o que ou quantos objetos terão que ser criados até o tempo de execução.
- você quer localizar o conhecimento das especificidades de instanciar um objeto particular para a subclasse de modo que o cliente não precisa se preocupar com os detalhes.
- você deseja criar uma estrutura externa, que uma aplicação pode importar/referenciar, e esconder os detalhes das especificidades envolvidas na criação do objeto/produto final.
- o fator único que define o padrão de fábrica, é que seu projeto agora defende a criação de objetos para a subclasse que a fábrica havia delegado.
padrões de Design em Python(livro)
às vezes você só quer desligar o seu computador e ler a partir de um livro. Então, este padrão, além de todos os outros padrões GoF são discutidos em Meus Padrões de Design no livro em Python ASIN B08XLJ8Z2J