builder.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/usr/bin/python
  2. # -*- coding : utf-8 -*-
  3. """
  4. @author: Diogenes Augusto Fernandes Herminio <diofeher@gmail.com>
  5. https://gist.github.com/420905#file_builder_python.py
  6. """
  7. # Director
  8. class Director(object):
  9. def __init__(self):
  10. self.builder = None
  11. def construct_building(self):
  12. self.builder.new_building()
  13. self.builder.build_floor()
  14. self.builder.build_size()
  15. def get_building(self):
  16. return self.builder.building
  17. # Abstract Builder
  18. class Builder(object):
  19. def __init__(self):
  20. self.building = None
  21. def new_building(self):
  22. self.building = Building()
  23. # Concrete Builder
  24. class BuilderHouse(Builder):
  25. def build_floor(self):
  26. self.building.floor = 'One'
  27. def build_size(self):
  28. self.building.size = 'Big'
  29. class BuilderFlat(Builder):
  30. def build_floor(self):
  31. self.building.floor = 'More than One'
  32. def build_size(self):
  33. self.building.size = 'Small'
  34. # Product
  35. class Building(object):
  36. def __init__(self):
  37. self.floor = None
  38. self.size = None
  39. def __repr__(self):
  40. return 'Floor: {0.floor} | Size: {0.size}'.format(self)
  41. # Client
  42. if __name__ == "__main__":
  43. director = Director()
  44. director.builder = BuilderHouse()
  45. director.construct_building()
  46. building = director.get_building()
  47. print(building)
  48. director.builder = BuilderFlat()
  49. director.construct_building()
  50. building = director.get_building()
  51. print(building)
  52. ### OUTPUT ###
  53. # Floor: One | Size: Big
  54. # Floor: More than One | Size: Small