Evgenii Legotckoi
13 сентября 2018 г. 18:03

Пример - Абстрактная фабрика на Python

Пример абстрактной фабрики на языке программирования Python


  1. """
  2. Предоставление интерфейса для создания семейств связанных или зависимых
  3. объектов без указания их конкретных классов.
  4. """
  5.  
  6. import abc
  7.  
  8.  
  9. class AbstractFactory(metaclass=abc.ABCMeta):
  10. """
  11. Объявление интерфейса для методов, которые создают объекты.
  12. """
  13.  
  14. @abc.abstractmethod
  15. def create_product_a(self):
  16. pass
  17.  
  18. @abc.abstractmethod
  19. def create_product_b(self):
  20. pass
  21.  
  22.  
  23. class ConcreteFactory1(AbstractFactory):
  24. """
  25. Внедрить операции по созданию конкретных объектов фабрики.
  26. """
  27.  
  28. def create_product_a(self):
  29. return ConcreteProductA1()
  30.  
  31. def create_product_b(self):
  32. return ConcreteProductB1()
  33.  
  34.  
  35. class ConcreteFactory2(AbstractFactory):
  36. """
  37. Внедрить операции по созданию конкретных объектов продукта.
  38. """
  39.  
  40. def create_product_a(self):
  41. return ConcreteProductA2()
  42.  
  43. def create_product_b(self):
  44. return ConcreteProductB2()
  45.  
  46.  
  47. class AbstractProductA(metaclass=abc.ABCMeta):
  48. """
  49. Объявить интерфейс класса.
  50. """
  51.  
  52. @abc.abstractmethod
  53. def interface_a(self):
  54. pass
  55.  
  56.  
  57. class ConcreteProductA1(AbstractProductA):
  58. """
  59. Определить объект продукта, который будет создан соответствующей абстрактной фабрикой.
  60. Внедрить интерфейс AbstractProduct.
  61. """
  62.  
  63. def interface_a(self):
  64. pass
  65.  
  66.  
  67. class ConcreteProductA2(AbstractProductA):
  68. """
  69. Определить объект продукта, который будет создан соответствующей абстрактной фабрикой.
  70.   Внедрить интерфейс AbstractProduct.
  71. """
  72.  
  73. def interface_a(self):
  74. pass
  75.  
  76.  
  77. class AbstractProductB(metaclass=abc.ABCMeta):
  78. """
  79. Объявить интерфейс класса.
  80. """
  81.  
  82. @abc.abstractmethod
  83. def interface_b(self):
  84. pass
  85.  
  86.  
  87. class ConcreteProductB1(AbstractProductB):
  88. """
  89. Определить объект продукта, который будет создан соответствующей абстрактной фабрикой.
  90. Внедрить интерфейс AbstractProduct.
  91. """
  92.  
  93. def interface_b(self):
  94. pass
  95.  
  96.  
  97. class ConcreteProductB2(AbstractProductB):
  98. """
  99. Определить объект продукта, который будет создан соответствующей абстрактной фабрикой.
  100. Внедрить интерфейс AbstractProduct.
  101. """
  102.  
  103. def interface_b(self):
  104. pass
  105.  
  106.  
  107. def main():
  108. for factory in (ConcreteFactory1(), ConcreteFactory2()):
  109. product_a = factory.create_product_a()
  110. product_b = factory.create_product_b()
  111. product_a.interface_a()
  112. product_b.interface_b()
  113.  
  114.  
  115. if __name__ == "__main__":
  116. main()

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь