Evgenii Legotckoi
Sept. 13, 2018, 6:03 p.m.

Example - Abstract Factory in Python

An example of an abstract factory in the Python programming language


  1. """
  2. Provide an interface for creating families of related or dependent
  3. objects without specifying their concrete classes.
  4. """
  5.  
  6. import abc
  7.  
  8.  
  9. class AbstractFactory(metaclass=abc.ABCMeta):
  10. """
  11. Declare an interface for operations that create abstract product
  12. objects.
  13. """
  14.  
  15. @abc.abstractmethod
  16. def create_product_a(self):
  17. pass
  18.  
  19. @abc.abstractmethod
  20. def create_product_b(self):
  21. pass
  22.  
  23.  
  24. class ConcreteFactory1(AbstractFactory):
  25. """
  26. Implement the operations to create concrete product objects.
  27. """
  28.  
  29. def create_product_a(self):
  30. return ConcreteProductA1()
  31.  
  32. def create_product_b(self):
  33. return ConcreteProductB1()
  34.  
  35.  
  36. class ConcreteFactory2(AbstractFactory):
  37. """
  38. Implement the operations to create concrete product objects.
  39. """
  40.  
  41. def create_product_a(self):
  42. return ConcreteProductA2()
  43.  
  44. def create_product_b(self):
  45. return ConcreteProductB2()
  46.  
  47.  
  48. class AbstractProductA(metaclass=abc.ABCMeta):
  49. """
  50. Declare an interface for a type of product object.
  51. """
  52.  
  53. @abc.abstractmethod
  54. def interface_a(self):
  55. pass
  56.  
  57.  
  58. class ConcreteProductA1(AbstractProductA):
  59. """
  60. Define a product object to be created by the corresponding concrete
  61. factory.
  62. Implement the AbstractProduct interface.
  63. """
  64.  
  65. def interface_a(self):
  66. pass
  67.  
  68.  
  69. class ConcreteProductA2(AbstractProductA):
  70. """
  71. Define a product object to be created by the corresponding concrete
  72. factory.
  73. Implement the AbstractProduct interface.
  74. """
  75.  
  76. def interface_a(self):
  77. pass
  78.  
  79.  
  80. class AbstractProductB(metaclass=abc.ABCMeta):
  81. """
  82. Declare an interface for a type of product object.
  83. """
  84.  
  85. @abc.abstractmethod
  86. def interface_b(self):
  87. pass
  88.  
  89.  
  90. class ConcreteProductB1(AbstractProductB):
  91. """
  92. Define a product object to be created by the corresponding concrete
  93. factory.
  94. Implement the AbstractProduct interface.
  95. """
  96.  
  97. def interface_b(self):
  98. pass
  99.  
  100.  
  101. class ConcreteProductB2(AbstractProductB):
  102. """
  103. Define a product object to be created by the corresponding concrete
  104. factory.
  105. Implement the AbstractProduct interface.
  106. """
  107.  
  108. def interface_b(self):
  109. pass
  110.  
  111.  
  112. def main():
  113. for factory in (ConcreteFactory1(), ConcreteFactory2()):
  114. product_a = factory.create_product_a()
  115. product_b = factory.create_product_b()
  116. product_a.interface_a()
  117. product_b.interface_b()
  118.  
  119.  
  120. if __name__ == "__main__":
  121. main()

Comments

Only authorized users can post comments.
Please, Log in or Sign up
  • Last comments
  • Evgenii Legotckoi
    March 9, 2025, 9:02 p.m.
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    March 9, 2025, 4:14 p.m.
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
  • ИМ
    Nov. 22, 2024, 9:51 p.m.
    Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
  • Evgenii Legotckoi
    Oct. 31, 2024, 11:37 p.m.
    Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
  • A
    Oct. 19, 2024, 5:19 p.m.
    Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html