Factory Method is a Creational Design Pattern that allows an interface or a class to create an object, but let subclasses decides which class or object to instantiate. Usando o método de fábrica, temos as melhores maneiras de criar um objeto. Aqui, os objetos são criados sem expor a lógica ao cliente e para criar o novo tipo do objeto, o cliente usa a mesma interface comum.
problemas que enfrentamos sem Método de fábrica:
Imagine que está a ter a sua própria startup, que oferece uma partilha livre nas diferentes partes do país. A versão inicial do app apenas fornece o ridesharing de duas rodas, mas com o passar do tempo, o seu app torna-se popular e agora você quer adicionar três e Quatro Rodas ridesharing também.É uma grande notícia! mas e os desenvolvedores de software de sua startup? Eles têm que alterar todo o código porque agora a maior parte do código é acoplado com a classe de Duas Rodas e os desenvolvedores têm que fazer alterações em toda a base de código.
depois de todas essas mudanças, ou os desenvolvedores terminam com o código confuso ou com a carta de demissão.
Localizador app
representação Gráfica de Problemas sem o uso de Método de Fábrica
Vamos entender o conceito com um exemplo a mais que está relacionado com as localizações e traduções de línguas diferentes.Suponha que criamos um aplicativo cujo objetivo principal é traduzir uma língua para outra e atualmente o nosso aplicativo trabalha apenas com 10 idiomas. Agora o nosso aplicativo tornou-se amplamente popular entre as pessoas, mas a demanda cresceu de repente para incluir mais 5 línguas.É uma grande notícia! apenas para o proprietário não para os desenvolvedores. Eles têm que alterar todo o código porque agora a maior parte do código é acoplado apenas com as línguas existentes e é por isso que os desenvolvedores têm que fazer alterações em toda a base de código, o que é realmente uma tarefa difícil de fazer.
vamos olhar para o código para o problema que podemos enfrentar sem usar o método de fábrica.
Nota: O código seguinte é escrito sem usar o método de fábrica.
class FrenchLocalizer: def __init__(self): self.translations = {"car": "voiture", "bike": "bicyclette", "cycle":"cyclette"} def localize(self, message): return self.translations.get(msg, msg) class SpanishLocalizer: def __init__(self): self.translations = {"car": "coche", "bike": "bicicleta", "cycle":"ciclo"} def localize(self, msg): return self.translations.get(msg, msg) class EnglishLocalizer: def localize(self, msg): return msg if __name__ == "__main__": f = FrenchLocalizer() e = EnglishLocalizer() s = SpanishLocalizer() message = for msg in message: print(f.localize(msg)) print(e.localize(msg)) print(s.localize(msg))
solução Por Método de fábrica:
sua solução é substituir as chamadas de construção de objeto direto para a frente com chamadas para o método de fábrica especial. Na verdade, não haverá diferença na criação de objetos, mas eles estão sendo chamados dentro do método de fábrica.
por exemplo: as nossas classes Two_Wheeler, Three_Wheeler e Four_wheeler devem implementar a interface de partilha de pacotes que irá declarar um método chamado ride. Cada classe irá implementar este método de forma única.
solution_factory_diagram
now let us understand the factory method with the help of an example:
class FrenchLocalizer: def __init__(self): self.translations = {"car": "voiture", "bike": "bicyclette", "cycle":"cyclette"} def localize(self, message): return self.translations.get(msg, msg) class SpanishLocalizer: def __init__(self): self.translations = {"car": "coche", "bike": "bicicleta", "cycle":"ciclo"} def localize(self, msg): return self.translations.get(msg, msg) class EnglishLocalizer: def localize(self, msg): return msg def Factory(language ="English"): localizers = { "French": FrenchLocalizer, "English": EnglishLocalizer, "Spanish": SpanishLocalizer, } return localizers() if __name__ == "__main__": f = Factory("French") e = Factory("English") s = Factory("Spanish") message = for msg in message: print(f.localize(msg)) print(e.localize(msg)) print(s.localize(msg))
Diagrama de Classe para o Método de Fábrica:
vejamos o diagrama de classes considerando o exemplo de partilha de viagens.
Factory_pattern_class_diagrma
vantagens do método-Fábrica:
- podemos facilmente adicionar os novos tipos de produtos sem perturbar o código de cliente existente.Geralmente, o acoplamento apertado é evitado entre os produtos e as classes e objetos criadores.
desvantagens da utilização do método de fábrica:
- para criar um objeto de produto concreto particluar, o cliente pode ter que subclassificar a classe criadora.
- você acaba com um grande número de pequenos arquivos I. E., A confusão dos arquivos.
- em um sistema gráfico, dependendo da entrada do usuário, ele pode desenhar diferentes formas como Retângulo, Quadrado, círculo, etc. Mas para a facilidade de ambos os desenvolvedores, bem como o cliente, podemos usar o método de fábrica para criar a instância, dependendo da entrada do Usuário. Então não temos que mudar o código do cliente para adicionar uma nova forma.
- num local de reserva de Hotel, podemos reservar um espaço para 1 Quarto, 2 quartos, 3 quartos, etc. Aqui o usuário pode inserir o número de quartos que deseja reservar. Usando o método de fábrica, podemos criar uma classe de fábrica qualquer sala que nos ajudará a criar a instância, dependendo da entrada do Usuário. Mais uma vez, não temos de alterar o código do cliente para adicionar as novas instalações.
aplicabilidade :
leia mais: padrão de fábrica em C++