Skip to content

Instantly share code, notes, and snippets.

@ZoranPandovski
Last active October 9, 2018 12:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ZoranPandovski/35819d18f35edea62cf74c097495ed67 to your computer and use it in GitHub Desktop.
Save ZoranPandovski/35819d18f35edea62cf74c097495ed67 to your computer and use it in GitHub Desktop.
Builder design pattern example
class Director():
'''Controls creation of final product '''
def __init__(self, builder):
self._builder = builder
def create_house(self):
self._builder.create_new_house()
self._builder.add_basement()
self._builder.add_rooms()
self._builder.add_roof()
def get_house(self):
return self._builder.house
class Builder():
''' Abstract Builder'''
def __init__(self):
self.house = None
def create_new_house(self):
self.house = House()
class BarracaBuilder(Builder):
'''Concrete Builder that provide parts for building baraca '''
def add_basement(self):
self.house.basement = 'Cement basement'
def add_roof(self):
self.house.roof = 'Wood shingl roof'
def add_rooms(self):
self.house.rooms = 1
class House():
''' Product '''
def __init__(self):
self.basement = None
self.roof = None
self.rooms = None
def __str__(self):
return 'Building {}, {}, and {} room'.format(self.basement,
self.roof, self.rooms)
builder = BarracaBuilder()
director = Director(builder)
director.create_house()
house = director.get_house()
print(house)
#OUTPUT
#Building Cement basement, Wood shingl roof, and 1 room
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment