設計模式(1) 物件導向的設計原則

2021-07-14 17:12:40 字數 2476 閱讀 7723

hdis-framework是乙個基於springboot、kubernetes、阿里雲服務,編寫的乙個用於支撐微服務的極速開發框架。

其文件詳盡,demo全面,設計合理,開箱即用,節省開發時間,提公升開發效率。

配套的docker、kubernetes教程已踩過各種坑,讓你的微服務無障礙的順暢執行起來。

hdis與kubernetes或springcloud配合使用,能達到最佳效果。

設計模式要解決的問題核心為軟體的:可維護性、可復用性

在原有的模組上,很難加入新功能,因為加入新功能會影響到其他很多模組。

很難修改,因為修改也會影響到其他很多模組。

重複**很多,復用率低,無法維護。

粘合度過高,導致類依賴的是實現本身而不是介面,無法替換原有設計。

ps:影響到替他模組時就將對軟體原有**進行修改,此時可能會給舊**中引入錯誤,也可能會使我們不得不對整個功能進行重構,並且需要原有**經過重新測試。

什麼是開閉原則?

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

即:當軟體需要變化時,盡量通過擴充套件軟體實體的行為來實現變化,而不是通過修改已有的**來實現變化。

為什麼說他是根本原則?

我們遵循設計模式前面5大原則,以及使用23種設計模式的目的就是遵循開閉原則。也就是說,只要我們對前面5項原則遵守的好了,設計出的軟體自然是符合開閉原則的。

定義

所有引用基類的地方必須能透明地使用其子類的物件。

個人理解

第一層理解:使用「抽象」和「多型」將設計中的靜態結構改為動態結構,在程式中盡量使用基類型別來對物件進行定義,而在執行時再確定其子類型別,用子類物件來替換父類物件。可以結合具體的設計模式,來理解黎克特制代換原則(如果沒有黎克特制代換原則,設計模式會怎麼樣?)。設計模式本身就是靈活運用了黎克特制代換原則。

第二層理解:在軟體中將乙個基類物件替換成它的子類物件,程式將不會產生任何錯誤和異常,反過來則不成立,如果乙個軟體實體使用的是乙個子類物件的話,那麼它不一定能夠使用基類物件。

第三層理解:子類可以擴充套件父類的功能,但不能改變父類原有的功能。因為繼承關係增加了物件間的耦合性,所以繼承時不能破壞繼承體系。

定義

高層模組不應該依賴低層模組,二者都應該依賴其抽象。

抽象不應該依賴細節,細節應該依賴抽象。

個人理解

依賴倒置原則基於這樣乙個事實:相對於細節的多變性,抽象的東西要穩定的多。以抽象為基礎搭建起來的架構比以細節為基礎搭建起來的架構要穩定的多。

依賴倒置原則的核心思想是面向介面程式設計。

定義

客戶端不應該依賴它不需要的介面。

乙個類對另乙個類的依賴應該建立在最小的介面上。

個人理解

介面隔離原則的含義是:建立單一介面,不要建立龐大臃腫的介面,盡量細化介面,介面中的方法盡量少。也就是說,我們要為各個類建立專用的介面,而不要試圖去建立乙個很龐大的介面供所有依賴它的類去呼叫。

介面盡量小,但是要有限度。對介面進行細化可以提高程式設計靈活性是不掙的事實,但是如果過小,則會造成介面數量過多,使設計複雜化。所以一定要適度。

可以按照「角色」的概念為指導,來對介面進行細分,介面只處理此角色所涉及的操作。具體有哪些介面就看系統設計是否對角色區分清楚。

定義

復用時,要盡量使用組合/聚合,盡量不要使用繼承。

個人理解

只有當以下的條件全部被滿足時,才應當使用繼承關係。子類是超類的乙個特殊種類,而不是超類的乙個角色,也就是區分「has-a」和「is-a」.只有「is-a」關係才符合繼承關係,「has-a」關係應當使用聚合來描述。

永遠不會出現需要將子類換成另外乙個類的子類的情況。如果不能肯定將來是否會變成另外乙個子類的話,就不要使用繼承(黎克特制代換原則)。

子類具有擴充套件超類的責任,而不是具有置換掉或登出掉超類的責任。如果乙個子類需要大量的置換掉超類的行為,那麼這個類就不應該是這個超類的子類(黎克特制代換原則)。

定義

乙個物件應該對其他物件保持最少的了解。

個人理解

盡量降低類與類之間的耦合。通俗的來講,就是乙個類對自己依賴的類知道的越少越好。

為了實現迪公尺特法則。可以使用依賴倒置原則,使其依賴於抽象。

迪公尺特法則在設計上的體現

優先考慮將乙個類設定成不變類

盡量降低乙個類的訪問許可權

謹慎使用序列化

盡量降低成員的訪問許可權

設計模式 物件導向設計原則

軟體的可維護性和可複製性是兩個非常重要的軟體質量屬性 物件導向物件設計原則是設計模式學習的基礎。每乙個設計模式都符合乙個或者多個物件導向設計原則 單一職責原則是最簡單的物件導向設計原則,它用於控制類的粒度大小 單一設計原則 乙個物件應該只包含單一的職責,並且該職責被完整的封裝在乙個類裡 這也意味著 ...

設計模式 物件導向設計原則

物件導向設計原則為支援可維護性復用而誕生,這些原則蘊含在很多設計模式中,它們是從許多設計方案中總結出的指導性原則。最常見的7種物件導向設計原則如下表所示 使用頻率 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領域中的相應職責 開閉原則 o...

設計模式 物件導向設計原則

世界是具體的,認知是抽象的。像自然界中的生物 植物 動物乙個個名詞,就是對一系列具體個體抽象出來的稱謂,而魚 老虎 樹等就是乙個個實在的具體。哦,也許你會說,樹也是對一系列具體個體的抽象出來的稱謂,對也不對,對是因為樹確實是一系列具體個體的抽象稱謂,不對是因為照這個邏輯下去,就會陷入死迴圈,直到小到...