- 單一職責原則(Single Reponsibility Principle,SRP)
- 里氏替換原則(Liskov Substitution Principle,LSP)
- 依賴倒置原則(Dependence Inversion Principle,DIP)
- 接口隔離原則(Interface Segregation Principe,ISP)
- 迪米特法則(Law of Demeter,LOD)
- 開閉原則(Open Closed Principle,OCP)
開閉原則(OCP)
Open Closed Principle,簡稱:OCP
一個軟件實體應當對擴展開放,對修改封閉
問題由來:在軟件的生命週期內,因爲變化、升級和維護等原因需要對軟件原有代碼進行修改時,可能會給舊代碼中引入錯誤,也可能會使我們不得不對整個功能進行重構,並且需要原有代碼經過重新測試。
解決方案:當軟件需要變化時,儘量通過擴展軟件實體的行爲來實現變化,而不是通過修改已有的代碼來實現變化。
一個軟件或系統在開發的過程中,以及上線生產後,隨着時間的推移,都會產生變化,這是鐵定的事實。那我們在設計時就要儘量適應這些變化,來提高系統的穩定性和靈活性,開閉原則就是說一個軟件實體應該通過擴展來實現變化,而不是通過修改已有的代碼來實現變化。
開閉原則指導我們如何建立一個穩定的、靈活的系統。
開閉原則是面向對象設計中最基礎的設計原則,它指導我們如何建立穩定靈活的系統。開閉原則可能是設計模式六項原則中定義最模糊的一個了,它只告訴我們對擴展開放,對修改關閉,可是到底如何才能做到對擴展開放,對修改關閉,並沒有明確的告訴我們。
開閉原則就是一個目標,其它五大原則都是實現手段,它就像一個口號,你們都要奔着這個口號來。要滿足開閉原則,就需要對系統進行抽象化設計,抽象化是開閉原則的關鍵,換句說法就是對系統進行抽象約束。
開閉原則的重要性
開閉原則對測試的影響:
開閉原則可是保持原有的測試代碼仍然能夠正常運行,我們只需要對擴展的代碼進行測試就可以了。
開閉原則可以提高複用性:
在面向對象的設計中,所有的邏輯都是從原子邏輯組合而來的,而不是在一個類中獨立實現一個業務邏輯。只有這樣代碼纔可以複用,粒度越小,被複用的可能性就越大。
開閉原則可以提高可維護性:
面向對象開發的要求
如何使用開閉原則
1、抽象約束
- 通過接口或者抽象類約束擴展,對擴展進行邊界限定,不允許出現在接口或抽象類中不存在的public方法;
- 參數類型、引用對象儘量使用接口或者抽象類,而不是實現類;
- 抽象層儘量保持穩定,一旦確定即不允許修改。
2、元數據控制模塊行爲
在實際開發中,要儘量使用註解或者配置文件來控制程序的行爲,減少重複開發。
3、約定優於配置
在一個團隊中,建立項目章程是非常重要的,因爲章程中指定了所有人員都必須遵守的約定,對項目來說,約定優於配置。
4、封裝變化
對變化的封裝包含兩層含義:
第一,將相同的變化封裝到一個接口或者抽象類中;
第二,將不同的變化封裝到不同的接口或抽象類中,不應該有兩個不同的變化出現在同一個接口或抽象類中。
舉個栗子~
這個太抽象了,就不舉慄了吧!!哈哈哈哈……(有空碰到合適的例子再更~)