Назад к вопросам
Middle
75
questionbank
Что означает принцип открытости/закрытости?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech 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)