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

Объектно-ориентированное программирование в Swift — Динамическое связывание

Фрагмент из «Объектно-ориентированное программирование в Swift»: Динамическое связывание.

Plain text main.swift
class PaymentMethod {
    func processPayment(amount: Double) {
        print("Обработка платежа: \(amount)")
    }
}

class CreditCardPayment: PaymentMethod {
    override func processPayment(amount: Double) {
        print("Обработка платежа кредитной картой: \(amount)")
    }
}

class PayPalPayment: PaymentMethod {
    override func processPayment(amount: Double) {
        print("Обработка платежа через PayPal: \(amount)")
    }
}

class CryptoPayment: PaymentMethod {
    override func processPayment(amount: Double) {
        print("Обработка платежа криптовалютой: \(amount)")
    }
}

class PaymentProcessor {
    var paymentMethod: PaymentMethod
    
    init(paymentMethod: PaymentMethod) {
        self.paymentMethod = paymentMethod
    }
    
    func executePayment(amount: Double) {
        paymentMethod.processPayment(amount: amount)
    }
}

let processor = PaymentProcessor(paymentMethod: CreditCardPayment())
processor.executePayment(amount: 1000.0)

processor.paymentMethod = PayPalPayment()
processor.executePayment(amount: 1000.0)

processor.paymentMethod = CryptoPayment()
processor.executePayment(amount: 1000.0)
class PaymentMethod {
    func processPayment(amount: Double) {
        print("Обработка платежа: \(amount)")
    }
}

class CreditCardPayment: PaymentMethod {
    override func processPayment(amount: Double) {
        print("Обработка платежа кредитной картой: \(amount)")
    }
}

class PayPalPayment: PaymentMethod {
    override func processPayment(amount: Double) {
        print("Обработка платежа через PayPal: \(amount)")
    }
}

class CryptoPayment: PaymentMethod {
    override func processPayment(amount: Double) {
        print("Обработка платежа криптовалютой: \(amount)")
    }
}

class PaymentProcessor {
    var paymentMethod: PaymentMethod
    
    init(paymentMethod: PaymentMethod) {
        self.paymentMethod = paymentMethod
    }
    
    func executePayment(amount: Double) {
        paymentMethod.processPayment(amount: amount)
    }
}

let processor = PaymentProcessor(paymentMethod: CreditCardPayment())
processor.executePayment(amount: 1000.0)

processor.paymentMethod = PayPalPayment()
processor.executePayment(amount: 1000.0)

processor.paymentMethod = CryptoPayment()
processor.executePayment(amount: 1000.0)