-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathq3.py
104 lines (69 loc) · 2.41 KB
/
q3.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# Classes pai que será ponte: Motor
class Motor:
def __init__(self):
self.tipo = "motor generico"
def motor_tipo(self):
pass
# Classes filhas do motor
class Eletrico(Motor):
def __init__(self):
self.tipo = "elétrico"
def motor_tipo(self):
print("Eu carrego um motor do tipo elétrico")
class Hibrido(Motor):
def __init__(self):
self.tipo = "híbrido"
def motor_tipo(self):
print("Eu carrego um motor do tipo híbrido")
class Combustao(Motor):
def __init__(self):
self.tipo = "combustão"
def motor_tipo(self):
print("Eu carrego um motor do tipo combustão")
# classe pai Veículo
class Veiculo:
def __init__(self, Motor): # ponte motor na definicao de veiculo
self.motor = Motor
self.tipo = "veiculo generico"
self.descricao = "Olá! eu sou um " + self.tipo + " com motor tipo " + self.motor.tipo
def set_tipo(self, tipo):
self.tipo = tipo
self.descricao = "Olá! eu sou um " + self.tipo + " com motor tipo " + self.motor.tipo
def get_tipo(self):
print(self.tipo)
def get_descricao(self):
print(self.descricao)
# aplicacao do metodo de fabrica
class InstanciarVeiculo:
def instancia(self, Veiculo, tipo):
instanciador = get_instanciador(tipo)
return instanciador(Veiculo)
def get_instanciador(tipo):
if (tipo == "moto") | (tipo == "motocicleta"):
return _instancia_moto
elif (tipo == "carro") | (tipo == "automovel"):
return _instancia_carro
elif (tipo == "caminhao") | (tipo == "caminhonete"):
return _instancia_caminhao
else:
raise ValueError(tipo)
def _instancia_moto(Veiculo):
Veiculo.set_tipo("moto")
def _instancia_carro(Veiculo):
Veiculo.set_tipo("carro")
def _instancia_caminhao(Veiculo):
Veiculo.set_tipo("caminhao")
motor1 = Eletrico()
motor2 = Combustao()
motor3 = Hibrido()
# fazendo a ponte entre as classes de veiculo e as classes de motor
veiculo1 = Veiculo(motor1)
veiculo2 = Veiculo(motor2)
veiculo3 = Veiculo(motor3)
instanciador = InstanciarVeiculo()
instanciador.instancia(veiculo1, "moto")
instanciador.instancia(veiculo2, "carro")
instanciador.instancia(veiculo3, "caminhao")
veiculo1.get_descricao()
veiculo2.get_descricao()
veiculo3.get_descricao()