定義:
軟件中的對象(類,模塊,函數等等)應該對于擴展是開放的,但是對于修改是封閉的。
個人理解:
開閉原則通俗的來說就是軟件系統中包含的各種組件,例如模塊(Modules)、類(Classes)以及功能(Functions)等等,應該在不修改現有代碼的基礎上,引入新功能。開閉原則中“開”,是指對于組件功能的擴展是開放的,是允許對其進行功能擴展的;開閉原則中“閉”,是指對于原有代碼的修改是封閉的,即不應該修改原有的代碼。
問題由來:
在軟件的生命周期內,由于需求變動、維護和升級需要對項目部分代碼修改時,可能使沒修改的部分發生錯誤,這就需要對沒修改的部分也要進行測試。
解決方案:
軟件需要變化時,盡量通過擴展原來實體完成修改而不是修改原來代碼,也就是說用抽象構建框架,用實現擴展細節。
其實,開閉原則整個的定義比較模糊,它只是描述了軟件中的對象對于擴展開放,對于修改關閉,但沒有說如何實現。開閉原則算是前5中原則的一個抽象總結,前五種是開閉原則的一些具體實現,所以如果使用開閉原則,其實有點虛,因為它沒有一個固定的模式,但是最終保證的是提高程序的復用性、可維護性等要求。
聯系到前面所說的設計模式原則中的SOLID(單一職責原則、開閉原則、里氏替換原則、接口隔離原則和依賴倒置原則)以及迪米特法則,將設計模式六大原則除去開閉原則的設計模式原則實現了,也就完成了開閉原則。但是要明確一點,這些原則的實現不是是與否,而是實現的程序是多少。前面所介紹的設計模式前5大原則的作用如下:
最后說明一下如何去遵守這六個原則。對這六個原則的遵守并不是是和否的問題,而是多和少的問題,也就是說,我們一般不會說有沒有遵守,而是說遵守程度的多少。任何事都是過猶不及,設計模式的六個設計原則也是一樣,制定這六個原則的目的并不是要我們刻板的遵守他們,而需要根據實際情況靈活運用。對他們的遵守程度只要在一個合理的范圍內,就算是良好的設計。
新聞熱點
疑難解答