# Abstract Factory
class AbstractFactory:
def create_product(self):
pass
# Concrete Factory 1
class ConcreteFactory1(AbstractFactory):
def create_product(self):
return ConcreteProduct1()
# Concrete Factory 2
class ConcreteFactory2(AbstractFactory):
def create_product(self):
return ConcreteProduct2()
# Abstract Product
class AbstractProduct:
def operation(self):
pass
# Concrete Product 1
class ConcreteProduct1(AbstractProduct):
def operation(self):
print("ConcreteProduct1 operation")
# Concrete Product 2
class ConcreteProduct2(AbstractProduct):
def operation(self):
print("ConcreteProduct2 operation")
# Client
class Client:
def __init__(self, factory):
self.factory = factory
def execute_operation(self):
product = self.factory.create_product()
product.operation()
# Usage
factory1 = ConcreteFactory1()
client1 = Client(factory1)
client1.execute_operation()
factory2 = ConcreteFactory2()
client2 = Client(factory2)
client2.execute_operation()