|
|
|
@ -0,0 +1,48 @@
|
|
|
|
|
# Интерфейс стратегии (общий для всех стратегий)
|
|
|
|
|
class PaymentStrategy
|
|
|
|
|
def pay(amount)
|
|
|
|
|
raise NotImplementedError, "Метод pay должен быть реализован в подклассе"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# Реализация стратегии оплаты картой
|
|
|
|
|
class CreditCardPayment < PaymentStrategy
|
|
|
|
|
def pay(amount)
|
|
|
|
|
puts "Оплата #{amount}₽ с использованием кредитной карты 💳"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# Реализация стратегии оплаты через SberBank
|
|
|
|
|
class SberPayment < PaymentStrategy
|
|
|
|
|
def pay(amount)
|
|
|
|
|
puts "Оплата #{amount}₽ через Sber ID 🏦"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# Реализация стратегии оплаты биткоинами
|
|
|
|
|
class BitcoinPayment < PaymentStrategy
|
|
|
|
|
def pay(amount)
|
|
|
|
|
puts "Оплата #{amount}₽ в биткоинах ₿"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# Контекст использующий стратегию
|
|
|
|
|
class PaymentProcessor
|
|
|
|
|
def initialize(strategy)
|
|
|
|
|
@strategy = strategy
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def process_payment(amount)
|
|
|
|
|
@strategy.pay(amount)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# === Пример использования ===
|
|
|
|
|
card_payment = PaymentProcessor.new(CreditCardPayment.new)
|
|
|
|
|
card_payment.process_payment(1000)
|
|
|
|
|
|
|
|
|
|
paypal_payment = PaymentProcessor.new(SberPayment.new)
|
|
|
|
|
paypal_payment.process_payment(2000)
|
|
|
|
|
|
|
|
|
|
bitcoin_payment = PaymentProcessor.new(BitcoinPayment.new)
|
|
|
|
|
bitcoin_payment.process_payment(3000)
|