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)