/ Design Patterns / Creational patterns / Factory Method Factory Method Design Pattern in Python Back to Factory Method description """ Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses. """ import abc class Creator(metaclass=abc.ABCMeta): """ Declare the factory method, which returns an object of type Product. Creator may also define a default implementation of the factory method that returns a default ConcreteProduct object. Call the factory method to create a Product object. """ def __init__(self): self.product = self._factory_method() @abc.abstractmethod def _factory_method(self): pass def some_operation(self): self.product.interface() class ConcreteCreator1(Creator): """ Override the factory method to return an instance of a ConcreteProduct1. """ def _factory_method(self): return ConcreteProduct1() class ConcreteCreator2(Creator): """ Override the factory method to return an instance of a ConcreteProduct2. """ def _factory_method(self): return ConcreteProduct2() class Product(metaclass=abc.ABCMeta): """ Define the interface of objects the factory method creates. """ @abc.abstractmethod def interface(self): pass class ConcreteProduct1(Product): """ Implement the Product interface. """ def interface(self): pass class ConcreteProduct2(Product): """ Implement the Product interface. """ def interface(self): pass def main(): concrete_creator = ConcreteCreator1() concrete_creator.product.interface() concrete_creator.some_operation() if __name__ == "__main__": main() Support our free website and own the eBook! 22 design patterns and 8 principles explained in depth 406 well-structured, easy to read, jargon-free pages 228 clear and helpful illustrations and diagrams An archive with code examples in 4 languages All devices supported: EPUB/MOBI/PDF formats Learn more...