嘻哈說 開放封閉原則

2021-09-24 07:43:39 字數 2581 閱讀 7991

之前我們已經說過:

《嘻哈說:單一職責原則》

《嘻哈說:黎克特制替換原則》

《嘻哈說:依賴倒置原則》

《嘻哈說:介面隔離原則》

《嘻哈說:迪公尺特法則》

集齊五個原則,就可以召喚神龍了。

神龍就是開放封閉原則,可以這樣說:它是其他五大原則的實現,是物件導向設計的終極目標

既然開放封閉原則這麼高階大氣上凳次,那我們趕緊來看一下開放封閉原則的定義。

乙個軟體實體應當對擴充套件開放,但對修改關閉

對擴充套件開放的意思是,我們可以肆無忌憚的增加新功能。

對修改關閉的意思是,對原有功能不會產生任何修改。

可以說這是寫**的最高境界。

遺憾的是,這種情況不可能發生。需求本身就是在修修改改,程式又是為需求服務的,**不修改是不可能的。

我們要盡量做到的開放封閉原則。完全做到開放封閉原則,臣妾做不到哇!

方法1:抽象乙個介面或者抽象類,定義公共的方法,從而方便擴充套件。

方法2:引用介面或者抽象類,不依賴具體實現類。

方法3:介面和抽象類不能修改,可以繼承介面或者抽象類從而達到擴充套件的目的。

這三個方法都在圍繞著乙個核心,是什麼呢?

沒錯,就是抽象

我們應該面向抽象程式設計,不要面向具體程式設計。

有沒有似曾相識的感覺?

是的,依賴倒置原則中也曾經提到過這樣的思想。

開放封閉原則是總綱,而依賴倒置原則是開放封閉原則乙個非常好的實現。

還有黎克特制替換原則也是對開放封閉原則的一種非常良好的實現,所以我們可以直接用《嘻哈說:黎克特制替換原則》中的場景以及**。

八大菜系的廚師

番茄餐廳,經過兢兢業業的經營,從一家小型的餐館成長為一家大型餐廳。

廚師:老闆,咱們現在家大業大客流量也大,雖然我精力充沛,但我也架不住這麼多人的摧殘。

老闆:摧殘?你確定?

廚師:哪能,您聽錯了,是照顧,架不住這麼多人的照顧。

老闆:小火雞,可以呀,求生欲很強嘛。那你有什麼想法?

廚師:我覺得咱們可以引入八大菜系廚師,一來,什麼菜系的菜就交給什麼菜系的廚師,味道質量會更加的上乘,才能配的上我們這麼高規格的餐廳。

老闆:嗯,說的有點道理,繼續說。

廚師:二來,人手多了,還可以增加上菜的速度,三來......

老闆:有道理,馬上招聘廚師,小火雞,恭喜你,公升官了,你就是未來的廚師長。因為你求生欲真的很強。

廚師長:謝謝老闆。(內心:我求生欲很強?**強了?放學你別走,我讓你嚐嚐我的厲害,給你做一桌子好菜)

求生欲果真很強。

package com.fanqiekt.principle.liskov;

/** * 抽象廚師類

* * @author 番茄課堂-懶人

*/public abstract class chef

/*** 開始做飯

*/protected abstract void cooking(string dishname);

}複製**

抽象廚師類,公有cook方法,負責廚師做飯的一些相同邏輯,例如開始烹飪的準備工作,以及出鍋。

具體做飯的細節則提供乙個抽象方法cooking(正在做飯),具體菜系廚師需要重寫該方法。

package com.fanqiekt.principle.liskov;

/** * 山東廚師

* * @author 番茄課堂-懶人

*/public class shandongchef extends chef

}/**

* 炒西紅柿雞蛋

*/private void cookingtomato

() }

複製**

魯菜廚師shandongchef繼承了廚師抽象類chef,實現了抽象方法cooking。

新增西紅柿炒雞蛋的功能,我們可以通過繼承chef抽象類實現shandongchef類進行擴充套件,這就是對擴充套件開放

避免修改chef類,從而避免修改給原有系統帶來新的問題,這就是對修改封閉

接下來,請您欣賞開放封閉原則的原創歌曲

嘻哈說:介面隔離原則

作曲:懶人

作詞:懶人

對擴充套件開放

對修改封閉

對具體來講

要大膽痛擊

對抽象愛上

程式設計就會容易

開放封閉我中意瘋迷

做番茄雞蛋可以新增山東大廚

而不是在廚師類裡大修大補

否則**就像狂風中的蠟燭

隨時可能一命嗚呼

複製**

試聽這裡

閒來無事聽聽曲,知識已填腦中去;

學習複習新方式,頭戴耳機不小覷。

番茄課堂,學習也要酷。

開放 封閉原則

開放 封閉原則 the open closed principle,簡稱ocp 或者叫開 閉原則,意思是說軟體實體 類 模組 函式等等 應該可以擴充套件,但是不可修改。即對於擴充套件時開放的 open for extension 對於更改是關閉的 closed for modification 這樣...

開放封閉原則

開放封閉原則 開放封閉原則 就是軟體實體 類 模組 函式等等 應該可以擴充套件,但是不可修改。這個原則有兩個特徵,乙個是說對於擴充套件是開放的,另乙個是說對於更改時封閉的。軟實體包括 1 專案或軟體產品中按照一定的邏輯規則劃分的模組。2 抽象和類。3 方法。無論模組是多麼的封閉,都會存在一些無法對之...

開放封閉原則

開放封閉原則對於擴充套件是開放的,對於修改是封閉的。所謂開放封閉原則就是軟體實體應該對外擴充套件開發,而對修改封閉。開放封閉原則是所有物件導向原則的核心,軟體設計本身所追求的目標就是封裝變化,降低耦合,而開放封閉原則正是對這一目標最直接的體現。例如之前部落格的計算程式中,起初如果我們想要乙個加法的程...