diff --git a/strategy_pattern.rb b/strategy_pattern.rb new file mode 100644 index 0000000..b2ac25e --- /dev/null +++ b/strategy_pattern.rb @@ -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)