Программные объекты должны быть открыты для расширения, но закрыты для модификации
Это означает, что любой класс или модуль должен быть написан так, чтобы его можно было использовать как есть, можно расширять, но не изменять
Плохой пример в Javascript
var juiceTypes = ['Mango','Apple','Lemon'];
function juiceMaker(type){
if(juiceTypes.indexOf(type)!=-1)
console.log('Here is your juice, Have a nice day');
else
console.log('sorry, Error happned');
}
exports.makeJuice = juiceMaker;
Теперь, если вы хотите добавить еще один тип сока, вам нужно отредактировать сам модуль. Таким образом мы нарушаем OCP.
Хороший пример в Javascript
var juiceTypes = [];
function juiceMaker(type){
if(juiceTypes.indexOf(type)!=-1)
console.log('Here is your juice, Have a nice day');
else
console.log('sorry, Error happned');
}
function addType(typeName){
if(juiceTypes.indexOf(typeName)==-1)
juiceTypes.push(typeName);
}
function removeType(typeName){
let index = juiceTypes.indexOf(typeName)
if(index!==-1)
juiceTypes.splice(index,1);
}
exports.makeJuice = juiceMaker;
exports.addType = addType;
exports.removeType = removeType;
Теперь вы можете добавлять новые типы соков извне модуля, не редактируя тот же модуль.