天天看點

Java面向對象設計原則1——開閉原則開閉原則:開閉原則的目标:開閉原則的實作:

在我們學習面向對象程式設計的時候,總會出現一些問題,好比以前剛剛寫好的代碼,上線測試可以、正常運作,突然有一天說要加一個功能,改完之後,發現以前正常運作的功能不能用了,類似這樣的問題有好多好多,為了避免類似的事件發生,程式員一定要根據這些原則去開發程式。

我們一個一個來學習,今天來學習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.封裝變化

封裝變化說的就是,将相同的變化封裝到一個接口或者抽象類中。不應該出現兩個不同的變化出現在同一個接口或者抽象類中。

我們要封裝的是有變化的點。我們給這些變化的店建立穩定的接口,封裝可能要變化的。

這些可能了解起來比較難,希望大家可以多去思考一下。