設計模式 六大原則

2021-07-31 15:02:48 字數 2787 閱讀 6633

我們現在學習的是物件導向的程式設計,而可維護,可復用都是以物件導向設計原則為基礎的,遵循這些設計原則,

我們可以有效

的提高系統的復用性,維護性,擴充套件性;在這些原則的基礎上,我們使我們可以設計出更加清晰,更加

簡潔的系統。

分析:

(1)乙個

類(大到模組,小到方法)的職責過多,那麼這個類被復用的可能性就低。因為乙個類的職責太多了,

乙個職責變化很有

可能影響到其他職責的執行,這樣就則加了耦合性,不利於擴充套件。因此我們應該將不同的職責封裝

到不同的類中,減少不同職責之

間的影響,從而實現高內聚,低耦合。

(2)類的職責包括:資料職責和行為職責。資料職責可以通過屬性來體現;行為職責則通過方法來體現。

(3)單一職責原則是實現高內聚,低耦合的指導方針,它是比較簡單但又很難運用好的原則。因為職責的發現和分

離這個過程,一般人很難去發現和運用。

例如:如果資料結構和列印資料表都放在database類中,這樣就顯得乙個類的職責太多。因為列印資料可以分為部

分資料和全部數

據,只有我們把資料結構和列印資料表分隔開,這個類才能更好的被復用,從而增加了類的復用性。

分析:

(1)為了滿足市場需要,增加乙個新的功能,我們不能去修改已有的**,而讓軟體具備一定的功能去適應新的需

求 ;而是應該在原來抽象的基礎上去通過擴充套件也就是增加子類的方式去增加新的功能區適應社會的需要。

(2)實現開閉原則的關鍵就是抽象化。眾所周知越抽象越容易擴充套件,但是這是我們在保證系統設計框架穩定的前提

下進行的擴充套件的;允許擴充套件的是實現類,抽象類和介面是不允許修改的。

(3)開閉原則是物件導向設計中「可復用設計」的基石原則,是物件導向設計中最重要的原則之一。黎克特制代換,依

賴倒轉,介面隔離都可以看做是開閉 原則的實現。

例如:模板方法模式和觀察者模式都是開閉原則的極好體現。都是在保證原來**的基礎上,保證修改的關閉;通過增加子類來達到擴充套件新的功能,即對外是開放的。

分析:

(1)在軟體裡面,父類替換成他的子類,程式的行為沒有變化。而反過來,乙個軟體使用的是乙個子類,那麼不一

定能夠使用父類。

(2)黎克特制代換原則主要出發點是繼承基礎上的抽象和多型。抽象的是父類,多型的是子類。

方法的重寫:子類繼承父類的相同的方法,輸入引數一樣,但是做出有別於父類的操作,要覆蓋父類方法。---相同

引數,相同返回值,不同的實現。

方法的過載:同樣的方法能夠根據傳入引數的不同,做出不同的處理。---不同的引數,不同的返回值(建構函式裡

面經常用到)

例如:鳥和企鵝就是乙個典型。鳥可以飛,而企鵝不會飛,因此不能用企鵝來黎克特制代替大多數鳥來實現飛這個方法。

正方形和長方形也是乙個典型。正方形是長度相等的長方形,這是大家公認。讓正方形來黎克特制代換長方形這也是順理

成章的事。

分析:

(1)抽象不應該依賴細節,細節應該依賴抽象。也就是說要針對介面程式設計,不要對實現程式設計。

(2)依賴倒轉原則的核心思想是面向介面程式設計

例如:電腦上的鍵盤,滑鼠,他們都用的usb介面,如果鍵盤壞了,我們 就可以換乙個鍵盤;滑鼠壞了就可以換乙個

滑鼠;而不是鍵盤或滑鼠壞了就去換一台電腦,這樣就顯的太不合理了。只要我們將這個介面程式設計好,無論是滑鼠還

是鍵盤壞了,我們就可以立馬換乙個滑鼠或鍵盤,從而更好的達到復用這個效果。

分析:

(1)在類的結構設計上,每乙個類都應當盡量降低成員的訪問。不要和陌生人說話,只跟自己的朋友通訊。

(2)迪公尺特法則其根本思想是強調了類之間的松耦合(解耦)。每乙個類應儘量減少對其他類的依賴,,盡可能獨

立,弱耦合能使類的復用率提高。

例如:外觀模式。系統中的類盡量不要與其他類之間相互作用,耦合度降低了,擴充套件的時候就不用去修改這些類了,

這樣維護的成本才會降低。

聚合(無生命的):表示一種弱的「擁有」關係,體現的是a可以包含b物件,但b物件不是a物件的一部分;

合成(有生命的,共存亡):表示的是一種強的「擁有」關係,體現了嚴格的部分和整體的關係,部分和整體的生命周

期一樣。

分析:

(1)組合/聚合可以使系統更加靈活,使類與類的耦合度降低。乙個類的變化對其他類造成的影響相對來說比較小,

因此一般首選組合/聚合,其次才考慮繼承。濫用繼承往往增加系統構件和維護的難度,不利於擴充套件維護,因此要慎

用繼承。

(2)組合/聚合原則和黎克特制代換相鋪相成,兩者都是實現「開閉原則」的規範。

例如:手機品牌和手機軟體,這兩者往往採用聚合,從而減少耦合性,達到易擴充套件的效果。

開閉原則、黎克特制轉換、依賴倒轉原則一般會同時出現:開閉是目標,黎克特制是基礎,依賴是手段,它們相輔相成,相互補充,目標一致,只是分析問題時所站角度不同。

單一職責告訴我們實現類要職責單一;黎克特制轉換告訴我們不要破壞繼承體系;依賴倒置告訴我們要面向介面程式設計;迪公尺特法則告訴我們要降低耦合,開閉是總綱,告訴我們對擴充套件開放,對修改關閉。

設計模式六大原則

0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...

設計模式六大原則

0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...

設計模式六大原則

參考文章 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領域中的相應職責,或者可以定義為 就乙個類而言,應該只有乙個引起它變化的原因。開閉原則 open closed principle,ocp 乙個軟體實體應當對擴充套件開放,對修改關閉。...