## 開閉原則
**【定義】**
> 當需要改變一個程序的功能或者給這個程序增加新功 能的時候,可以使用增加代碼的方式,但是不允許改動程序的源代碼
我來強行解釋一下,對擴展開放,對修改封閉
**【優點】** 程序的穩定性提升、容易變化的地方分離出來后更容易維護
**【缺點】** 代碼的完全封閉幾乎不可能,誰也沒有’未卜先知‘的能力,但是我們可以盡可能的去容易變化和不容易變化的地方,挑出容易變化的地方進行封閉
**【應用】**
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. 封裝變化
封裝變化就是把可能變化的地方分離出去,這樣只需要維護已經被分離出去的容易變化的地方
方式有:放置掛鉤、回調函數等
## 總結:
開放-封閉原則其實還是跟我們的程序的維護及擴展性相關的原則,設計原則基本是圍繞程序的可讀、可維護、可擴展、高性能、安全等方面來進行的(正確性有待考究,目前我是這么認為的,有不同意見歡迎評論區留言),設計原則這塊說的都比較相對,就想上一張的最少知識和單一職責原則一樣,實際項目想要的做到這些,只能是一定程度上的,因為有些原則就像一個主觀題,是沒有標準答案的,但是有跡可循
- 視覺規范
- 色彩
- 文字
- 偏移
- 圖標
- 列表組件
- 表單組件
- 詳情組件
- 其他組件
- 研發規范
- 編碼規范
- 函數式編程
- 純函數
- 柯里化
- 函數組合
- 函子
- 面向對象編程
- 設計原則
- 單一職責原則
- 里氏替換原則
- 依賴倒置原則
- 接口隔離原則
- 開閉原則
- 迪米特原則
- 組合復用原則
- 設計模式
- 創建型模式
- 工廠模式
- 簡單工廠
- 工廠方法
- 抽象工廠
- 單例模式
- 建造者模式
- 原型模式
- 結構型模式
- 適配器模式
- 橋接模式
- 過濾器模式
- 組合模式
- 裝飾器模式
- 外觀模式
- 享元模式
- 代理模式
- 行為型模式
- 責任鏈模式
- 命令模式
- 解釋器模式
- 迭代器模式
- 中介者模式
- 備忘錄模式
- 觀察者模式
- 狀態模式
- 策略模式
- 模板模式
- 訪問者模式
- 組件設計規范
- 組件文檔編寫規范
- 版本管理規范