-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuilder.py
More file actions
109 lines (77 loc) · 2.35 KB
/
builder.py
File metadata and controls
109 lines (77 loc) · 2.35 KB
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
105
106
107
108
109
from __future__ import annotations
from abc import ABC, abstractmethod
from typing import Any
class AbstractBuilder(ABC):
@property
@abstractmethod
def product(self) -> None:
...
@abstractmethod
def produce_trip_computer(self) -> None:
...
@abstractmethod
def produce_sunroof(self) -> None:
...
@abstractmethod
def produce_ac(self) -> None:
...
@abstractmethod
def produce_power_windows(self) -> None:
...
class ConcreteBuilder(AbstractBuilder):
def __init__(self) -> None:
self.reset()
def reset(self) -> None:
self._product = Car()
@property
def product(self) -> Car:
product = self._product
self.reset()
return product
def produce_trip_computer(self) -> None:
self._product.add("Trip Computer")
def produce_sunroof(self) -> None:
self._product.add("Sunroof")
def produce_ac(self) -> None:
self._product.add("AC")
def produce_power_windows(self) -> None:
self._product.add("Power Windows")
class Car:
def __init__(self) -> None:
self.parts = []
def add(self, part: Any) -> None:
self.parts.append(part)
def list_parts(self) -> None:
print(f"Car has parts: {', '.join(self.parts)}", end="")
class Director:
def __init__(self) -> None:
self._builder = None
@property
def builder(self) -> AbstractBuilder:
return self._builder
@builder.setter
def builder(self, builder: AbstractBuilder) -> None:
self._builder = builder
def build_minimal_viable_car(self) -> None:
self.builder.produce_ac()
def build_full_featured_car(self) -> None:
self.builder.produce_ac()
self.builder.produce_sunroof()
self.builder.produce_power_windows()
self.builder.produce_trip_computer()
if __name__ == "__main__":
director = Director()
builder = ConcreteBuilder()
director.builder = builder
print("Standard basic Car: ")
director.build_minimal_viable_car()
builder.product.list_parts()
print("\n")
print("Standard full featured Car: ")
director.build_full_featured_car()
builder.product.list_parts()
print("\n")
print("Custom product: ")
builder.produce_sunroof()
builder.produce_trip_computer()
builder.product.list_parts()