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!