Ответ
Принцип open/closed (открыто для расширения, закрыто для модификации) означает, что классы/компоненты должны быть расширяемы без изменения их исходного кода.
Пример с React-компонентом:
// Базовый компонент Button (закрыт для модификаций)
const Button = ({ onClick, children }) => (
<button onClick={onClick} className="base-btn">
{children}
</button>
);
// Расширяем функциональность через композицию (открыт для расширений)
const IconButton = ({ icon, ...props }) => (
<Button {...props}>
<Icon name={icon} />
{props.children}
</Button>
);
В этом примере:
- Базовый
Button
не меняется при добавлении новых вариантов кнопок - Новая функциональность добавляется через создание новых компонентов (
IconButton
) - Можно добавлять любые варианты кнопок без риска сломать существующий код