在我們學習面向對象程式設計的時候,總會出現一些問題,好比以前剛剛寫好的代碼,上線測試可以、正常運作,突然有一天說要加一個功能,改完之後,發現以前正常運作的功能不能用了,類似這樣的問題有好多好多,為了避免類似的事件發生,程式員一定要根據這些原則去開發程式。
我們一個一個來學習,今天來學習7大面向對象設計原則之一,開閉原則。
開閉原則:
開閉原則(Open Closed Principle,OCP),它由勃蘭特·梅耶(Bertrand Meyer)提出,在1988 年的著作《面向對象軟體構造》(Object Oriented Software Construction)中提出
軟體實體應當對擴充開放,對修改關閉(Software entities should be open for extension,but closed for modification)。
這就是開閉原則的經典定義。
軟體實體指的是:
1.項目或軟體産品中按照一定的邏輯規則劃分的子產品。
2.抽象和類。
3.方法。
好了,先簡單了解一下這句話,然後我們開始講述它!
開閉原則想要表述的,就是我最上面提出的那個問題的設計方法,出現上述的那種問題,一定是沒有去使用開閉原則,是以導緻沒問題的代碼,在增加了新的功能之後,正常的代碼不能用了。無法進行拓展的代碼寫出來沒有什麼意義的。
開閉原則的目标:
這個開閉原則是面向對象設計的一個終極目标,它會能讓程式橫向擴充、可以延續,靈活的使用。
如果實作了開閉原則,可以讓程式再測試的時候,隻要測試改動的地方即可;代碼複用性高了,可以省下很多事;
開閉原則的實作:
這個我們得舉一個栗子來說:
就拿手機iphone XR來說吧,iphone XR 給出了手機尺寸,哪裡有音量鍵、哪裡有鎖屏鍵、這都是已經固定好的,隻需要手機殼廠商按照這些參數設計手機殼就好了。我們不管怎麼更換手機殼,最初的那個眸子是不變的。但是一旦iphone XR的尺寸、還有按鍵位置固定了,就不允許再去改變了,不然那麼多大大小小的廠家不得賠死啊,造了一堆用不了的手機殼。
通過上面的栗子來說實作開閉原則的幾個點:
1.抽象限制
将事務的一些特征抽象出來,沒有具體的實作,也就表示它可以有非常多的可能性,可以跟随需求的變化而變化。抽象出來之後的東西要保持穩定,不允許說變就變。
2.資料控制子產品行為
用來描述環境和資料的資料, 通俗地說就是配置參數, 參數可以從檔案中獲得, 也可以從資料庫中獲得。說白了這個就是我們通常使用的配置檔案啊啥的,這個行為到了極緻的時候,就是spring的精髓了,控制反轉。
3.封裝變化
封裝變化說的就是,将相同的變化封裝到一個接口或者抽象類中。不應該出現兩個不同的變化出現在同一個接口或者抽象類中。
我們要封裝的是有變化的點。我們給這些變化的店建立穩定的接口,封裝可能要變化的。
這些可能了解起來比較難,希望大家可以多去思考一下。