forked from pkolt/design_patterns
-
Notifications
You must be signed in to change notification settings - Fork 0
/
builder.py
81 lines (54 loc) · 2.26 KB
/
builder.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
# coding: utf-8
"""
Строитель (Builder) - паттерн, порождающий объекты.
Отделяет конструирование сложного объекта от его представления,
так что в результате одного и того же процесса конструирования могут получаться разные представления.
От абстрактной фабрики отличается тем, что делает акцент на пошаговом конструировании объекта.
Строитель возвращает объект на последнем шаге, тогда как абстрактная фабрика возвращает объект немедленно.
Строитель часто используется для создания паттерна компоновщик.
"""
class Builder(object):
def build_body(self):
raise NotImplementedError()
def build_lamp(self):
raise NotImplementedError()
def build_battery(self):
raise NotImplementedError()
def create_flashlight(self):
raise NotImplementedError()
class Flashlight(object):
"""Карманный фонарик"""
def __init__(self, body, lamp, battery):
self._shine = False # излучать свет
self._body = body
self._lamp = lamp
self._battery = battery
def on(self):
self._shine = True
def off(self):
self._shine = False
def __str__(self):
shine = 'on' if self._shine else 'off'
return 'Flashlight [%s]' % shine
class Lamp(object):
"""Лампочка"""
class Body(object):
"""Корпус"""
class Battery(object):
"""Батарея"""
class FlashlightBuilder(Builder):
def build_body(self):
return Body()
def build_battery(self):
return Battery()
def build_lamp(self):
return Lamp()
def create_flashlight(self):
body = self.build_body()
lamp = self.build_lamp()
battery = self.build_battery()
return Flashlight(body, lamp, battery)
builder = FlashlightBuilder()
flashlight = builder.create_flashlight()
flashlight.on()
print flashlight # Flashlight [on]