-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathtest.py
More file actions
82 lines (70 loc) · 1.65 KB
/
test.py
File metadata and controls
82 lines (70 loc) · 1.65 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
#coding: utf-8
'''
@author: Diogenes Augusto Fernandes Herminio <diofeher@gmail.com>
https://gist.github.com/420905#file_builder_python.py
'''
# Director
class Director(object):
def __init__(self):
self._builder = None
@property
def builder(self):
return self._builder
@builder.setter
def builder(self, builder):
self._builder = builder
def construct_building(self):
self._builder.new_building()
self._builder.build_floor()
self._builder.build_size()
def get_building(self):
return self._builder.building
# Abstract Builder
class Builder(object):
def __init__(self):
self.building = None
def new_building(self):
self.building = Building()
# Concrete Builder
class HouseBuilder(Builder):
def build_floor(self):
self.building.floor = 'One'
def build_size(self):
self.building.size = 'Big'
class FlatBuilder(Builder):
def build_floor(self):
self.building.floor = 'More than One'
def build_size(self):
self.building.size = 'Small'
# Product
class Building(object):
def __init__(self):
self._floor = None
self._size = None
@property
def floor(self):
return self._floor
@floor.setter
def floor(self, floor):
self._floor = floor
@property
def size(self):
return self._size
@size.setter
def size(self, size):
self._size = size
def __repr__(self):
return 'Floor: %s | Size: %s' % (self.floor, self.size)
# Client
def test():
director = Director()
director.builder = HouseBuilder()
director.construct_building()
building = director.get_building()
print building
director.builder = FlatBuilder()
director.construct_building()
building = director.get_building()
print building
if __name__ == '__main__':
test()