Классы должны быть открыты для расширения, но закрыты для изменения.
Мы не должны изменять существующий код, чтобы добавить новое поведение —
мы должны расширять его через наследование или композицию.
// Нарушение OCP class Payment { void process(String type) { if (type.equals("card")) { /* логика карты */ } else if (type.equals("paypal")) { /* логика PayPal */ } } } // Правильно interface PaymentMethod { void pay(); } class CardPayment implements PaymentMethod { public void pay() { /* оплата картой */ } } class PayPalPayment implements PaymentMethod { public void pay() { /* оплата PayPal */ } } class PaymentProcessor { void process(PaymentMethod method) { method.pay(); } }
Классы должны быть открыты для расширения, но закрыты для изменения.
Мы не должны изменять существующий код, чтобы добавить новое поведение —
мы должны расширять его через наследование или композицию.
// Нарушение OCP class Payment { void process(String type) { if (type.equals("card")) { /* логика карты */ } else if (type.equals("paypal")) { /* логика PayPal */ } } } // Правильно interface PaymentMethod { void pay(); } class CardPayment implements PaymentMethod { public void pay() { /* оплата картой */ } } class PayPalPayment implements PaymentMethod { public void pay() { /* оплата PayPal */ } } class PaymentProcessor { void process(PaymentMethod method) { method.pay(); } }
// Пример кода
function hello(name) {
console.log(`Hi, ${name}!`);
}
hello("Sergey");