Source code for Creational.AbstractFactory.python.abstract_factory

from abc import ABC, abstractmethod


[docs] class AbstractProductA(ABC): """Abstract interface for ProductA."""
[docs] @abstractmethod def operation_a(self) -> str: """Perform an operation specific to ProductA.""" pass
[docs] class AbstractProductB(ABC): """Abstract interface for ProductB."""
[docs] @abstractmethod def operation_b(self) -> str: """Perform an operation specific to ProductB.""" pass
[docs] class ConcreteProductA1(AbstractProductA): """Concrete implementation of ProductA for Family 1."""
[docs] def operation_a(self) -> str: """Implement operation A for ConcreteProductA1.""" return "ConcreteProductA1"
[docs] class ConcreteProductA2(AbstractProductA): """Concrete implementation of ProductA for Family 2."""
[docs] def operation_a(self) -> str: """Implement operation A for ConcreteProductA2.""" return "ConcreteProductA2"
[docs] class ConcreteProductB1(AbstractProductB): """Concrete implementation of ProductB for Family 1."""
[docs] def operation_b(self) -> str: """Implement operation B for ConcreteProductB1.""" return "ConcreteProductB1"
[docs] class ConcreteProductB2(AbstractProductB): """Concrete implementation of ProductB for Family 2."""
[docs] def operation_b(self) -> str: """Implement operation B for ConcreteProductB2.""" return "ConcreteProductB2"
[docs] class AbstractFactory(ABC): """Abstract Factory interface."""
[docs] @abstractmethod def create_product_a(self) -> AbstractProductA: """Create a product of type A.""" pass
[docs] @abstractmethod def create_product_b(self) -> AbstractProductB: """Create a product of type B.""" pass
[docs] class ConcreteFactory1(AbstractFactory): """Concrete Factory 1: Creates products belonging to Family 1."""
[docs] def create_product_a(self) -> AbstractProductA: """Create a product of type A (ConcreteProductA1).""" return ConcreteProductA1()
[docs] def create_product_b(self) -> AbstractProductB: """Create a product of type B (ConcreteProductB1).""" return ConcreteProductB1()
[docs] class ConcreteFactory2(AbstractFactory): """Concrete Factory 2: Creates products belonging to Family 2."""
[docs] def create_product_a(self) -> AbstractProductA: """Create a product of type A (ConcreteProductA2).""" return ConcreteProductA2()
[docs] def create_product_b(self) -> AbstractProductB: """Create a product of type B (ConcreteProductB2).""" return ConcreteProductB2()