builder.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. # Пораждающий шаблон проектирования ("Строитель")
  2. # Предоставляет способ создания составного объекта
  3. # Отделяет конструирование сложного объекта от его представлени так что в результате одного процесса коструирования могут получаться развные объекты
  4. import abc
  5. class Phone():
  6. def __init__(self):
  7. self.data: str = ''
  8. def about_phone(self):
  9. return self.data
  10. def append_data(self, string: str):
  11. self.data += string
  12. class IDeveloper(metaclass=abc.ABCMeta):
  13. def create_display(self):
  14. pass
  15. def create_box(self):
  16. pass
  17. def system_install(self):
  18. pass
  19. def get_phone(self) -> Phone:
  20. pass
  21. class AndroidDeveloper(IDeveloper):
  22. def __init__(self):
  23. self.__phone = Phone()
  24. def create_display(self):
  25. self.__phone.append_data("Произведён дисплей Samsung; ")
  26. def create_box(self):
  27. self.__phone.append_data("Прозведён корпус Samsung; ")
  28. def system_install(self):
  29. self.__phone.append_data("Установлена система Android; ")
  30. def get_phone(self) -> Phone:
  31. return self.__phone
  32. class IphoneDeveloper(IDeveloper):
  33. def __init__(self):
  34. self.__phone = Phone()
  35. def create_display(self):
  36. self.__phone.append_data("Произведён дисплей Iphone; ")
  37. def create_box(self):
  38. self.__phone.append_data("Прозведён корпус Iphone; ")
  39. def system_install(self):
  40. self.__phone.append_data("Установлена система Ios; ")
  41. def get_phone(self) -> Phone:
  42. return self.__phone
  43. class Director:
  44. def __init__(self, developer: IDeveloper):
  45. self.__developer = developer
  46. def set_developer(self, developer: IDeveloper):
  47. self.__developer = developer
  48. def mount_only_phone(self) -> Phone:
  49. self.__developer.create_box()
  50. self.__developer.create_display()
  51. return self.__developer.get_phone()
  52. def mount_full_phone(self) -> Phone:
  53. self.__developer.create_box()
  54. self.__developer.create_display()
  55. self.__developer.system_install()
  56. return self.__developer.get_phone()
  57. if __name__ == "__main__":
  58. android_developer: IDeveloper = AndroidDeveloper()
  59. iphone_developer: IDeveloper = IphoneDeveloper()
  60. director = Director(android_developer)
  61. samsung: Phone = director.mount_full_phone()
  62. print(samsung.about_phone())
  63. director.set_developer(iphone_developer)
  64. iphone: Phone = director.mount_full_phone()
  65. print(iphone.about_phone())
  66. none: Phone = director.mount_only_phone()
  67. print(none.about_phone())
  68. # Прозведён корпус Samsung; Произведён дисплей Samsung; Установлена система Android;
  69. # Прозведён корпус Iphone; Произведён дисплей Iphone; Установлена система Ios;
  70. # Прозведён корпус Iphone; Произведён дисплей Iphone; Установлена система Ios; Прозведён корпус Iphone; Произведён дисплей Iphone;