## 开闭原则
**【定义】**
> 当需要改变一个程序的功能或者给这个程序增加新功 能的时候,可以使用增加代码的方式,但是不允许改动程序的源代码
我来强行解释一下,对扩展开放,对修改封闭
**【优点】** 程序的稳定性提升、容易变化的地方分离出来后更容易维护
**【缺点】** 代码的完全封闭几乎不可能,谁也没有’未卜先知‘的能力,但是我们可以尽可能的去容易变化和不容易变化的地方,挑出容易变化的地方进行封闭
**【应用】**
1. 用对象的多态性消除条件分支(常用)
多态指的是:同一操作在不同的对象上展现出不同的结果
多态最根本的作用就是通过把过程化的条件分支语句转化为对象的多态性,从而消除这些条件分支语句
我的理解是,只要有类似的行为(map.show instanceof Function)就可以去执行然后呈现出不同的结果,不必每个对象的’类型‘
代码对比:
~~~
// bad
var googleMap = {
show: function(){
console.log( '开始渲染谷歌地图' ); }
};
var baiduMap = {
show: function(){
console.log( '开始渲染百度地图' ); }
};
var renderMap = function( type ){
if ( type === 'google' ){
googleMap.show();
}else if ( type === 'baidu' ){
baiduMap.show();
} };
renderMap( 'google' ); // 输出:开始渲染谷歌地图
renderMap( 'baidu' ); // 输出:开始渲染百度地图
// good
var renderMap = function( map ){
if ( map.show instanceof Function ){
map.show(); }
};
renderMap( googleMap ); // 输出:开始渲染谷歌地图
renderMap( baiduMap ); // 输出:开始渲染百度地图
~~~
2. 封装变化
封装变化就是把可能变化的地方分离出去,这样只需要维护已经被分离出去的容易变化的地方
方式有:放置挂钩、回调函数等
## 总结:
开放-封闭原则其实还是跟我们的程序的维护及扩展性相关的原则,设计原则基本是围绕程序的可读、可维护、可扩展、高性能、安全等方面来进行的(正确性有待考究,目前我是这么认为的,有不同意见欢迎评论区留言),设计原则这块说的都比较相对,就想上一张的最少知识和单一职责原则一样,实际项目想要的做到这些,只能是一定程度上的,因为有些原则就像一个主观题,是没有标准答案的,但是有迹可循
- 视觉规范
- 色彩
- 文字
- 偏移
- 图标
- 列表组件
- 表单组件
- 详情组件
- 其他组件
- 研发规范
- 编码规范
- 函数式编程
- 纯函数
- 柯里化
- 函数组合
- 函子
- 面向对象编程
- 设计原则
- 单一职责原则
- 里氏替换原则
- 依赖倒置原则
- 接口隔离原则
- 开闭原则
- 迪米特原则
- 组合复用原则
- 设计模式
- 创建型模式
- 工厂模式
- 简单工厂
- 工厂方法
- 抽象工厂
- 单例模式
- 建造者模式
- 原型模式
- 结构型模式
- 适配器模式
- 桥接模式
- 过滤器模式
- 组合模式
- 装饰器模式
- 外观模式
- 享元模式
- 代理模式
- 行为型模式
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 策略模式
- 模板模式
- 访问者模式
- 组件设计规范
- 组件文档编写规范
- 版本管理规范