設計模式之七大原則

2021-08-20 14:58:32 字數 1859 閱讀 8283

學習了這麼長時間的設計模式,我們知道了設計模式是一套被反覆使用、多數人知曉的、經過分類的、**設計經驗的總結。使用設計模式是為了**可重用性、讓**更容易被他人理解、保證**可靠性。俗話說:國有國法,家有家規,那在使用設計模式時都需要遵循什麼原則呢?

就乙個類而言,應該僅有乙個引起它變化的原因;

why如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭受到意想不到的破壞;

how發現職責並把那些職責相互分離。如果你能夠想到多於乙個的動機去改變乙個類,那麼這個類就具有多於乙個類的職責,就應該考慮類的職責分離;

what

軟體實體(類、模組、函式等)應該可以擴充套件,但是不可修改;

why面對需求的改變可以保持相對穩定,從而使系統可以在第乙個版本以後不斷推出新的版本;遵循該原則會使程式可維護,可擴充套件,可復用,靈活性好

how無論模組是多麼的「封閉」,都會存在一些無法對之封閉的變化。既然不可能完全封閉,設計人員必須對於他設計的模組應該對哪種變化封閉做出選擇。他必須先猜測出最有可能發生的變化種類,然後構造抽象來隔離那些變化;當變化發生時,我們就建立抽象來隔離以後發生的同類變化,面對需求時,對程式的改動是通過增加新**進行的,而不是更改現有的**;

what

抽象不應該依賴細節,細節應該依賴抽象;針對介面程式設計,不要對實現程式設計;高層模組不應該依賴低層模組,兩個都依賴抽象;

why物件導向的程式設計裡強調強內聚,松耦合;cpu獨自成為了產品,在千千萬萬的電腦主機板上插上就可以使用,這是由於cpu的對外介面一樣,這就是介面的最大好處;

how誰也不要依靠誰,除了約定的介面,大家都可以靈活自如;只要介面是穩定的,那麼任何乙個更改都不用擔心其他受到影響,使得無論高層模組還是低層模組都可以很容易地被復用;

what

子型別必須能夠替換掉他們的父型別;在軟體裡面,把父類都替換成他的子類,程式的行為沒有變化;

why子類擁有父類所有非private的行為和屬性,所以使繼承復用成為了可能;由於子型別的可替換性才使得使用父類型別的模組在無需修改的情況下就可以擴充套件,使得開放-封閉成為了可能;

how只有當子類可以替換掉父類,軟體單位的功能不受到影響時,父類才能真正被復用,而子類也能夠在父類的基礎上增加新的行為;

what

如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三者**這個呼叫;

why迪公尺特法則的根本思想是強調了類之間的松耦合,類之間的耦合越弱,越有利於復用,乙個處在弱耦合的類被修改,不會對有關係的類造成波及;

how在類的結構設計上,每乙個類都應當盡量降低成員的訪問許可權,乙個類包裝好自己的private狀態,不需要讓別的類知道自己的字段或者行為就不要公開;

what

在乙個新的物件裡面使用一些已有的物件,使之成為新物件的一部分;新的物件通過向這些物件的委派達到復用已有功能的目的;聚合表示一種弱的「擁有」關係,體現的是a物件包含b物件,但b物件不是a物件的一部分;合成則是一種強的「擁有」關係,體現了嚴格的部分和整體的關係,部分和整體的生命週期是一樣的;

why讓各個類盡可能少的跟別人聯絡,提高其擴充套件性和維護性;有助於保持每個類被封裝,並被集中在單個任務上,保持較小規模;

how盡量使用聚合,盡量不使用繼承;

what

每乙個介面應該是一種角色,不多不少,不幹不該幹的事,該幹的事都要幹;乙個類對另乙個列的依賴應該建立在最小的介面上;

學習的過程中不要拘泥於一種形式,一種材料,應該集眾家之所長,聽取各方意見並進行研究。在使用設計模式的過程中,遵循設計模式的原則。

設計模式之七大原則

對類來說,即乙個類應該只負責乙個職責,如類a負責兩個不同的職責 職責1,職責2 當職責1發生需求變更而改變a時,可能造成職責2執行錯誤,所以需要將類a的粒度分解為a1,a2 com.witty.designpattern.princple.singleresponsibility包 com.witt...

設計模式七大原則

open closed principle ocp 最基礎的原則,對擴充套件開放,對修改關閉強調的是用抽象構建框架,用實現擴充套件細節,可以提高軟體系統的可復用性和可維護性 dependence inversion principle,dip 程式要依賴於抽象介面,不要依賴於具體實現。即面向介面程式...

設計模式 七大原則

懂了設計模式,你就懂了物件導向分析和設計 ooa d 的精要.編寫軟體的過程,面臨 耦合性 內聚性 維護性 可擴充套件性 重用性 靈活性 等各方面的挑戰。設計模式就是為了解決這些問題 程式設計時遵循的原則,各種設計模式的基礎 注意事項和細節 那麼問題來了,如何正確使用繼承?答案 黎克特制替換原則 基...