-
Notifications
You must be signed in to change notification settings - Fork 0
/
250simple_factory.py
77 lines (52 loc) · 1.98 KB
/
250simple_factory.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
"""
Na programação POO, o termo factory refere-se a uma classe ou método que é
responsável por criar objetos.
Vantagens:
- Permitem criar um sistema com baixo acoplamento entre classes porque
ocultam as classes que criam os objetos do código cliente.
- Facilitam a adição de novas classes ao código, porque o cliente não
conhece e nem utiliza a implementação da classe.
- Podem facilitar o processo de "cache" ou criação de "singletons" porque a
fábrica pode retornar um objeto já criado para o cliente, ao invés de criar
novos objetos sempre que o cliente precisar.
Desvantagens:
- Podem introduzir muitas classes no código.
Simple Factory:
- Uma espécie de Factory Method parametrizado.
- Pode não ser considerado um padrão de projeto por si só.
- Simple Factory pode quebrar princípios do SOLID.
"""
from abc import ABC, abstractmethod
class Veiculo(ABC):
@abstractmethod
def buscar_cliente(self) -> None:
pass
class CarroLuxo(Veiculo):
def buscar_cliente(self) -> None:
print('Carro de luxo está buscando o cliente...')
class CarroPopular(Veiculo):
def buscar_cliente(self) -> None:
print('Carro popular está buscando o cliente...')
class Moto(Veiculo):
def buscar_cliente(self) -> None:
print('Moto está buscando o cliente...')
class VeiculoFactory:
def __init__(self, tipo: str):
self.carro = self.get_carro(tipo)
@staticmethod
def get_carro(tipo: str) -> Veiculo:
if tipo == 'luxo':
return CarroLuxo()
if tipo == 'popular':
return CarroPopular()
if tipo == 'moto':
return Moto()
assert 0, 'Veiculo não existe'
def buscar_cliente(self):
self.carro.buscar_cliente()
if __name__ == '__main__':
from random import choice
carros_disponiveis = ['luxo', 'popular', 'moto']
for i in range(10):
carro = VeiculoFactory(choice(carros_disponiveis))
carro.buscar_cliente()