Sobes.tech
Middle

Que signifie le principe d'ouverture/fermeture?

sobes.tech IA

Réponse de l'IA

Модули должны быть открыты для расширения, но закрыты для модификации. Это означает, что можно добавить новую функциональность, не меняя существующий код. Достигается через использование абстракций (интерфейсов, протоколов, абстрактных классов) и наследования.

Пример: есть протокол PaymentProcessor и реализации для разных платежных систем. Новая платежная система добавляется без изменения существующих реализаций.

protocol PaymentProcessor {
    func processPayment(amount: Double)
}

class StripePaymentProcessor: PaymentProcessor {
    func processPayment(amount: Double) {
        // Логика оплаты через Stripe
        print("Processing \(amount) via Stripe")
    }
}

class PayPalPaymentProcessor: PaymentProcessor {
    func processPayment(amount: Double) {
        // Логика оплаты через PayPal
        print("Processing \(amount) via PayPal")
    }
}

// Добавление новой системы без изменения существующих классов
class ApplePayPaymentProcessor: PaymentProcessor {
    func processPayment(amount: Double) {
        // Логика оплаты через Apple Pay
        print("Processing \(amount) via Apple Pay")
    }
}

class PaymentManager {
    private let processor: PaymentProcessor

    init(processor: PaymentProcessor) {
        self.processor = processor
    }

    func makePayment(amount: Double) {
        processor.processPayment(amount: amount)
    }
}

// Использование
let stripeManager = PaymentManager(processor: StripePaymentProcessor())
stripeManager.makePayment(amount: 100.0)

let applePayManager = PaymentManager(processor: ApplePayPaymentProcessor())
applePayManager.makePayment(amount: 50.0)