Пример абстрактной фабрики на языке программирования Python
""" Предоставление интерфейса для создания семейств связанных или зависимых объектов без указания их конкретных классов. """ import abc class AbstractFactory(metaclass=abc.ABCMeta): """ Объявление интерфейса для методов, которые создают объекты. """ @abc.abstractmethod def create_product_a(self): pass @abc.abstractmethod def create_product_b(self): pass class ConcreteFactory1(AbstractFactory): """ Внедрить операции по созданию конкретных объектов фабрики. """ def create_product_a(self): return ConcreteProductA1() def create_product_b(self): return ConcreteProductB1() class ConcreteFactory2(AbstractFactory): """ Внедрить операции по созданию конкретных объектов продукта. """ def create_product_a(self): return ConcreteProductA2() def create_product_b(self): return ConcreteProductB2() class AbstractProductA(metaclass=abc.ABCMeta): """ Объявить интерфейс класса. """ @abc.abstractmethod def interface_a(self): pass class ConcreteProductA1(AbstractProductA): """ Определить объект продукта, который будет создан соответствующей абстрактной фабрикой. Внедрить интерфейс AbstractProduct. """ def interface_a(self): pass class ConcreteProductA2(AbstractProductA): """ Определить объект продукта, который будет создан соответствующей абстрактной фабрикой. Внедрить интерфейс AbstractProduct. """ def interface_a(self): pass class AbstractProductB(metaclass=abc.ABCMeta): """ Объявить интерфейс класса. """ @abc.abstractmethod def interface_b(self): pass class ConcreteProductB1(AbstractProductB): """ Определить объект продукта, который будет создан соответствующей абстрактной фабрикой. Внедрить интерфейс AbstractProduct. """ def interface_b(self): pass class ConcreteProductB2(AbstractProductB): """ Определить объект продукта, который будет создан соответствующей абстрактной фабрикой. Внедрить интерфейс AbstractProduct. """ def interface_b(self): pass def main(): for factory in (ConcreteFactory1(), ConcreteFactory2()): product_a = factory.create_product_a() product_b = factory.create_product_b() product_a.interface_a() product_b.interface_b() if __name__ == "__main__": main()