设计模式原则(单一、开放封闭、里氏代换、依赖倒转、迪米特法则五大原则)...
單一職責(zé)原則
單一職責(zé)原則,就一個類而言,應(yīng)該僅有一個引起它變化的原因。
? 如果一個類承擔(dān)的職責(zé)過多,就等于把這些職責(zé)耦合在一起,一個職責(zé)的變化可能會削弱或者抑制這個類完成其他職責(zé)的能力,當(dāng)變化發(fā)生時,設(shè)計會遭受到意想不到的破壞。事實上,我們完全可以找出來進行分類,分離。
? 軟件設(shè)計真正要做的許多內(nèi)容,就是發(fā)現(xiàn)職責(zé)并把那些職責(zé)相互分離。其實要去判斷是否應(yīng)該分離出類來,也不難,那就是如果你能夠想到多余一個的動機去改變一個類,那么這個類就具有都與一個的職責(zé),就應(yīng)該考慮類的職責(zé)分離。
開放-封閉原則
開放-封閉原則,是說軟件實體(類、模塊、函數(shù)等等)應(yīng)該可以擴展,但是不可修改。
這兩個原則其實是有兩個特征,一個是說“對于擴展是開放的”,另一個是說“對于更改是封閉的”。
無論模塊是多么封閉,都會存在一些無法對之封閉的變化。既然不可能完全封閉,設(shè)計人員必須對于他設(shè)計的模塊應(yīng)該對那種變化封閉做出選擇。他必須先猜測出最有可能發(fā)生的變化種類,然后構(gòu)造抽象來隔離那些變化。
面對需求,對程序的改動是通過增加新代碼進行的,而不是更改現(xiàn)有的代碼。這就是開放-封閉原則的精神所在。
開放封閉原則是面向?qū)ο笤O(shè)計的核心所在。遵循這個原則可以帶來面向?qū)ο蠹夹g(shù)所聲稱的巨大好處,也就是可維護、可擴展、可復(fù)用、靈活性好。開發(fā)人員應(yīng)該對程序中呈現(xiàn)出頻繁變化的那些部分做出抽象,然后,對于應(yīng)用程序中的每個部分都刻意地進行抽象同樣不是一個好主意。
依賴倒轉(zhuǎn)原則
?依賴倒轉(zhuǎn)原則,就是說抽象不應(yīng)該依賴細節(jié),細節(jié)應(yīng)該依賴抽象。
這話繞口,說白了,就是要針對接口編程,不要對試下編程。舉個例子,無論電腦的主板、CPU、內(nèi)存、硬盤都是在針對接口設(shè)計的,如果針對實現(xiàn)來設(shè)計,內(nèi)存就要對應(yīng)到具體的某個品牌的主板,那就會出現(xiàn)換內(nèi)存需要把主板也換了的尷尬。
所以說,PC電腦硬件的發(fā)展,和面向?qū)ο笏枷氚l(fā)展是完全類似的。這也說明世間萬物都是遵循牟宗類似的規(guī)律,誰先把握了這些規(guī)律,誰就最早成為了強者。
依賴倒轉(zhuǎn)原則其實可以說是面向?qū)ο笤O(shè)計的標(biāo)志,用那種語言來編寫程序不重要,如果編寫時考慮的都是如何針對抽象編程而不是針對細節(jié)編程,即程序中所有的依賴關(guān)系都是終止于抽象類或者接口,那就是面向?qū)ο蟮脑O(shè)計,反之那就是過程化的設(shè)計了。
里氏代換原則
?里氏代換原則,子類型必須能夠替換掉它們的父類型。
只有當(dāng)子類可以替換掉父類,軟件單位的功能不受到影響時,父類才能真正被復(fù)用,而子類也能夠在父類的基礎(chǔ)上增加新的行為。
比方說,貓是繼承動物類的,以動物的身份擁有吃喝跑叫等行為,可當(dāng)某一天,我們需要夠牛羊也擁有類似的行為,由于它們都是繼承動物,所以除了更改實例化的地方,程序其他處不需要更改。
?? 正是由于子類型的可替換性才使得使用父類類型的模塊在無需修改的情況下就可以擴展,才使得開放--封閉的原則成為了可能。
迪米特原則
迪米特法則,如果兩個類不必彼此直接通信,那么這兩個類就不應(yīng)當(dāng)發(fā)生直接的相互作用。如果其中一個類需要調(diào)用另一個類的某個方法的話,可以通過第三者轉(zhuǎn)發(fā)這個調(diào)用。
迪米特法則首先強調(diào)的前提是在類的結(jié)構(gòu)設(shè)計上,每一個類都應(yīng)當(dāng)盡量降低成員的訪問權(quán)限,也就是說,一個類包裝好自己的private狀態(tài),不需要讓別的類知道的字段或行為就不要公開。
迪米特法則其根本思想,是強調(diào)了類之間的松耦合。在程序設(shè)計時,類之間的耦合越弱,越有利于復(fù)用,一個處在弱耦合的類被修改,不會對有關(guān)系的類造成波及。也就是說,信息的隱藏促進了軟件的復(fù)用。
總結(jié)
以上是生活随笔為你收集整理的设计模式原则(单一、开放封闭、里氏代换、依赖倒转、迪米特法则五大原则)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 沫沫金:联想E431 1K6安装Wind
- 下一篇: ASP.NET MVC Model绑定(