Sobes.tech
Middle

Ի՞նչ է բաց լինելու/փակ լինելու սկզբունքը։

sobes.tech AI

Պատասխան AI-ից

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

Пример: есть протокол 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)