1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/usr/bin/python
- # -*- 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
- 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 BuilderHouse(Builder):
- def build_floor(self):
- self.building.floor = 'One'
- def build_size(self):
- self.building.size = 'Big'
- class BuilderFlat(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
- def __repr__(self):
- return 'Floor: {0.floor} | Size: {0.size}'.format(self)
- # Client
- if __name__ == "__main__":
- director = Director()
- director.builder = BuilderHouse()
- director.construct_building()
- building = director.get_building()
- print(building)
- director.builder = BuilderFlat()
- director.construct_building()
- building = director.get_building()
- print(building)
- ### OUTPUT ###
- # Floor: One | Size: Big
- # Floor: More than One | Size: Small
|