Design Pattern ‐ Factory - cunhapaulo/ReferenceCard GitHub Wiki

1. Product (Abstract)


from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def falar(self) -> str:
        pass

2. Product (Concrete)


class Cachorro(Animal):
    def falar(self) -> str:
        return "Au au!"

class Gato(Animal):
    def falar(self) -> str:
        return "Miau!"

3. Creator (Abstract factory)


class AnimalFactory(ABC):
    @abstractmethod
    def criar_animal(self) -> Animal:
        pass

4. Creator (Concrete)


class CachorroFactory(AnimalFactory):
    def criar_animal(self) -> Animal:
        return Cachorro()

class GatoFactory(AnimalFactory):
    def criar_animal(self) -> Animal:
        return Gato()

5. Cliente


def cliente(factory: AnimalFactory) -> None:
    animal = factory.criar_animal()
    print(f"O animal diz: {animal.falar()}")

3. Example of use


if __name__ == "__main__":
    cliente(CachorroFactory())  # Saída: O animal diz: Au au!
    cliente(GatoFactory())      # Saída: O animal diz: Miau!