🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 开闭原则 **【定义】** > 当需要改变一个程序的功能或者给这个程序增加新功 能的时候,可以使用增加代码的方式,但是不允许改动程序的源代码 我来强行解释一下,对扩展开放,对修改封闭 **【优点】** 程序的稳定性提升、容易变化的地方分离出来后更容易维护 **【缺点】** 代码的完全封闭几乎不可能,谁也没有’未卜先知‘的能力,但是我们可以尽可能的去容易变化和不容易变化的地方,挑出容易变化的地方进行封闭 **【应用】** 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. 封装变化 封装变化就是把可能变化的地方分离出去,这样只需要维护已经被分离出去的容易变化的地方 方式有:放置挂钩、回调函数等 ## 总结: 开放-封闭原则其实还是跟我们的程序的维护及扩展性相关的原则,设计原则基本是围绕程序的可读、可维护、可扩展、高性能、安全等方面来进行的(正确性有待考究,目前我是这么认为的,有不同意见欢迎评论区留言),设计原则这块说的都比较相对,就想上一张的最少知识和单一职责原则一样,实际项目想要的做到这些,只能是一定程度上的,因为有些原则就像一个主观题,是没有标准答案的,但是有迹可循