解釋:就乙個類而言,應該僅有乙個引起它變化的原因。
如果乙個子類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當發生變化時,設計會遭到意想不到的破壞。
軟體設計真正要做的許多內容,就是發現職責並把那些職責相互分離。
如果你能夠想到多於乙個的動機去改變乙個類,那麼這個類就具有多於乙個的職責(就需要修改)。
解釋:是說軟體實體(類、模組、函式等等)應該可以擴充套件,但是不可以修改。
無論模組多麼的封閉,都會存在一些無法對之封閉的變化。既然不可能完全封閉,設計人員必須對於他設計的模組應該對哪種變化封閉做出選擇。他必須先猜測出最有可能發生的變化種類,然後構造抽象來隔離那些變化。
由於事先猜測很難做到,這就需要我們等到變化發生時立即採取行動。
在我們最初寫**時,假設變化不會發生。當變化發生時,我們就建立抽象來隔離以後發生的同類變化。
面對需求,對程式的改動是通過增加新**進行的,而不是改變現有的**。
我們希望的是在開發工作展開不久就知道可能發生的變化。查明可能發生的變化所等待的時間越長,要建立正確的抽象就越困難。
開放-封閉原則是物件導向設計的核心所在。遵守這個原則可以帶來物件導向技術所聲稱的巨大好處,也就是可維護、可擴充套件、可復用、靈活性好。開放人員應該僅對程式中呈現出頻繁變化的那些部分抽象,然而,對於應用程式中的每個部分都刻意地進行抽象同樣不是乙個好主意。拒絕不成熟的抽象和抽象本身一樣重要。
解釋:抽象不應該依賴細節,細節應該依賴抽象。說白了,就是針對介面程式設計,不要針對實現程式設計。
依賴倒轉可以說是物件導向涉及的標誌,用哪種語言來編寫程式不重要,如果編寫時考慮的都是如何針對抽象程式設計而不是針對細節程式設計,即程式中所有的依賴關係都是終止於抽象類或者介面,那就是物件導向的設計,反之那就是過程化的設計了。
解釋:子型別必須能夠替換掉他們的父型別。乙個軟體實體如果使用的是乙個父類的話,那麼一定適用於其子類,而且它察覺不出父類物件和子類物件的區別。也就是說,在軟體裡面,把父類都替換成它的子類,程式的行為沒有變化。
只有當子類可以替換掉父類,軟體單位的功能不受影響時,父類才能真正被復用,而子類也能夠在父類的基礎上增加新的行為。
由於子型別的可替換性才使得使用父類型別的模組在無需修改的情況下就可以擴充套件。
解釋:如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三者**這個呼叫。
在類的設計結構上,每乙個類都應當盡量降低成員的訪問許可權。
迪公尺特法則其根本思想,是強調了類之間的松耦合。類之間的松耦合越弱,越利於重複利用,乙個處在弱耦合的類被修改,不會對有關係的類造成波及。
好的設計模式應該遵守的原則
要求在軟體系統中,乙個類只負責乙個功能領域中的相應職責 要求乙個軟體實體應當對擴充套件開放,對修改關閉,即在不修改源 的基礎上擴充套件乙個系統的行為 可以通俗表述為在軟體中如果能夠使用基類物件,那麼一定能夠使用其子類物件 要求抽象不應該依賴於細節,細節應該依賴於抽象 要針對介面程式設計,不要針對實現...
設計模式之設計原則
設計模式 design pattern 是物件導向技術的最新進展之一,由於物件導向設計的靈活性,增加了其設計的複雜性,設計模式的出現就是為了提高復用的設計方案,讓 更容易被他人理解 保證 可靠性。設計模式於己於他人於系統都是多贏的,設計模式使 編制真正工程化,設計模式是軟體工程的基石,如同大廈的一塊...
設計模式之設計原則
類應該對擴充套件開放,對修改關閉。使用介面及抽象類實現 目的 減少影響原有的方法 高層模組不應該依賴低層模組,兩者都應該依賴其抽象。依賴抽象類,不要依賴具體類 針對介面程式設計,不要針對實現程式設計 目的 解耦合 就乙個類而言,應該僅有乙個引起它變化的原因 當乙個類耦合了多個職責,當其中乙個職責發生...