fork download
  1. # Abstract Factory
  2. class AbstractFactory:
  3. def create_product(self):
  4. pass
  5.  
  6. # Concrete Factory 1
  7. class ConcreteFactory1(AbstractFactory):
  8. def create_product(self):
  9. return ConcreteProduct1()
  10.  
  11. # Concrete Factory 2
  12. class ConcreteFactory2(AbstractFactory):
  13. def create_product(self):
  14. return ConcreteProduct2()
  15.  
  16. # Abstract Product
  17. class AbstractProduct:
  18. def operation(self):
  19. pass
  20.  
  21. # Concrete Product 1
  22. class ConcreteProduct1(AbstractProduct):
  23. def operation(self):
  24. print("ConcreteProduct1 operation")
  25.  
  26. # Concrete Product 2
  27. class ConcreteProduct2(AbstractProduct):
  28. def operation(self):
  29. print("ConcreteProduct2 operation")
  30.  
  31. # Client
  32. class Client:
  33. def __init__(self, factory):
  34. self.factory = factory
  35.  
  36. def execute_operation(self):
  37. product = self.factory.create_product()
  38. product.operation()
  39.  
  40. # Usage
  41. factory1 = ConcreteFactory1()
  42. client1 = Client(factory1)
  43. client1.execute_operation()
  44.  
  45. factory2 = ConcreteFactory2()
  46. client2 = Client(factory2)
  47. client2.execute_operation()
  48.  
Success #stdin #stdout 0.04s 9448KB
stdin
Standard input is empty
stdout
ConcreteProduct1 operation
ConcreteProduct2 operation