Код IT
← Каталог

Принципы проектирования — Пример в коде — преждевременная абстракция

Фрагмент из «Принципы проектирования»: Пример в коде — преждевременная абстракция.

python projectencyclopedia7-06-proektirovanie-i-arhitektura-design-1112 embed URL статья в энциклопедии
Python main.py
# Плохо: фабрика стратегий для единственного способа оплаты
class PaymentStrategy(ABC):
    @abstractmethod
    def pay(self, amount): ...

class CardPayment(PaymentStrategy):
    def pay(self, amount):
        charge_card(amount)

class PaymentFactory:
    @staticmethod
    def create(kind: str) -> PaymentStrategy:
        if kind == "card":
            return CardPayment()
        raise ValueError(kind)

# Вызов: PaymentFactory.create("card").pay(100)
# Плохо: фабрика стратегий для единственного способа оплаты
class PaymentStrategy(ABC):
    @abstractmethod
    def pay(self, amount): ...

class CardPayment(PaymentStrategy):
    def pay(self, amount):
        charge_card(amount)

class PaymentFactory:
    @staticmethod
    def create(kind: str) -> PaymentStrategy:
        if kind == "card":
            return CardPayment()
        raise ValueError(kind)

# Вызов: PaymentFactory.create("card").pay(100)