《大话设计模式》6个原则 转帖
原創(chuàng):http://blog.csdn.net/sadfishsc/article/details/7221904
?
單一職責(zé)原則:就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因。
如果一個(gè)類承擔(dān)的職責(zé)過多,就等于把這些職責(zé)耦合在一起,一個(gè)職責(zé)的變化可能會(huì)削弱或者抑制這個(gè)類完成其他職責(zé)的能力。這個(gè)耦合會(huì)導(dǎo)致脆弱的設(shè)計(jì),當(dāng)變化發(fā)生時(shí),設(shè)計(jì)會(huì)遭到意想不到的破壞。
軟件設(shè)計(jì)真正要做的許多內(nèi)容,就是發(fā)現(xiàn)職責(zé)并把那些職責(zé)相互分離;如果能夠想到多于一個(gè)動(dòng)機(jī)去改變一個(gè)類,那么這個(gè)類就具有多于一個(gè)職責(zé),就應(yīng)該考慮類的職責(zé)分離。
?
開放-封閉原則:軟件實(shí)體(類、模塊、函數(shù)/方法等等)應(yīng)該可以擴(kuò)展,但是不可修改。
對于擴(kuò)展是開放的,而對于更改是封閉的。
開放-封閉原則的作用是使軟件的設(shè)計(jì)能夠面對需求的改變卻可以保持相對的穩(wěn)定,從而使得系統(tǒng)可以在第一個(gè)版本以后不斷推出新的版本。
絕對的對修改封閉是不可能的。無論模塊多么“封閉”,都會(huì)存在一些無法對之封閉的變化。既然不可能完全封閉,設(shè)計(jì)人員必須對于他設(shè)計(jì)的模塊應(yīng)該對哪種變化封閉做出選擇。必須先猜測出最有可能的發(fā)生的變化種類,然后構(gòu)造抽象來隔離那些變化。
在最初編寫代碼時(shí),假設(shè)變化不會(huì)發(fā)生。等到變化發(fā)生時(shí)立即采取行動(dòng),創(chuàng)建抽象來隔離以后發(fā)生的同類變化。
面對需求,對程序的改動(dòng)是通過增加新的代碼進(jìn)行的,而不是更改現(xiàn)有代碼。
在開發(fā)工作展開不久就應(yīng)該知道可能發(fā)生的變化,查明可能發(fā)生的變化所等待的時(shí)間越長,要?jiǎng)?chuàng)建正確的抽象就越困難。
開放-封閉原則是面向?qū)ο笤O(shè)計(jì)的核心所在。遵循這個(gè)原則可以帶來面向?qū)ο蠹夹g(shù)所聲稱的巨大好處,也就是可維護(hù)、可擴(kuò)展、可復(fù)用、靈活性好。開發(fā)人員應(yīng)該對程序中呈現(xiàn)出頻繁變化的那些部分作出抽象。然而,對于應(yīng)用程序中的每個(gè)部分都刻意進(jìn)行抽象同樣不是好主意。拒絕不成熟的抽象和抽象本身一樣重要。
?
里氏代換原則:子類型必須能夠替換掉它們的父類型。
一個(gè)軟件實(shí)體如果使用的是一個(gè)父類的話,那么一定適用于其子類,而且它察覺不出父類對象和子類對象的區(qū)別。也就是說,在軟件中,把父類都替換成它的子類,程序的行為沒有變化。
只有當(dāng)子類可以替換掉父類,軟件單位的功能不受到影響時(shí),父類才能真正被復(fù)用,而子類也才能夠在父類的基礎(chǔ)上增加新的行為。
由于子類型的可替代性才使得使用父類型的模塊在無需修改的情況下就能夠擴(kuò)展。
?
依賴倒轉(zhuǎn)原則:
A.高層模塊不應(yīng)該依賴低層模塊。二者都應(yīng)該依賴抽象。
B. 抽象不應(yīng)該依賴細(xì)節(jié)。細(xì)節(jié)應(yīng)該依賴抽象。
針對接口編程,不要針對實(shí)現(xiàn)編程。
面向過程開發(fā)時(shí),為了使得常用代碼可以復(fù)用,一般都會(huì)把這些代碼常用代碼寫成許多函數(shù)的程序庫,這樣在做新項(xiàng)目時(shí),去調(diào)用這些低層的函數(shù)就可以了。這就叫做高層模塊依賴低層模塊。依賴倒轉(zhuǎn)原則就是不管高層模塊還是低層模塊,都依賴于抽象,具體一點(diǎn)就是接口或抽象類,只要接口是穩(wěn)定的,那么任何一個(gè)的更改都不用擔(dān)心其他受到影響,這就使得無論高層模塊還是低層模塊都可以很容易被復(fù)用。
依賴倒轉(zhuǎn)其實(shí)可以說是面向?qū)ο笤O(shè)計(jì)的標(biāo)志,用哪種語言來編寫程序不重要,如果編寫時(shí)考慮的都是如何針對抽象編程而不是針對細(xì)節(jié)編程,即程序中所有的依賴關(guān)系都是終止于抽象類或者接口,那就是面向?qū)ο蟮脑O(shè)計(jì),反之那就是過程化的設(shè)計(jì)。
?
迪米特法則(最少知識原則):如果兩個(gè)類不必彼此直接通信,那么這兩個(gè)類就不應(yīng)當(dāng)發(fā)生直接的相互作用。如果其中一個(gè)類需要調(diào)用另一個(gè)類的某一個(gè)方法的話,可以通過第三者轉(zhuǎn)發(fā)這個(gè)調(diào)用。
迪米特法則首先強(qiáng)調(diào)的前提是在類的結(jié)構(gòu)設(shè)計(jì)上,每一個(gè)類都應(yīng)當(dāng)盡量降低成員的訪問權(quán)限。其根本思想是強(qiáng)調(diào)了類之間的松耦合。類之間的耦合越弱,越有利于復(fù)用,一個(gè)處在弱耦合的類被修改,不會(huì)對有關(guān)系的類造成波及。
?
合成/聚合復(fù)用原則:盡量使用合成和聚合,盡量不要使用類繼承。
聚合表示一種弱的“擁有”關(guān)系,體現(xiàn)的是A對象可以包含B對象,但B對象不是A對象的一部分;合成則是一種強(qiáng)的“擁有”關(guān)系,體現(xiàn)了嚴(yán)格的部分和整體的關(guān)系,部分和整體的生命周期一樣。
優(yōu)先使用對象的合成/聚合將有助于保持每個(gè)類的封裝,并被集中在單個(gè)任務(wù)上。這樣類和類繼承層次會(huì)保持較小的規(guī)模,并且不太可能增長到不可控制的龐然大物。
?
?
原創(chuàng):http://blog.csdn.net/sadfishsc/article/details/7221904
轉(zhuǎn)載于:https://www.cnblogs.com/JackieYang/archive/2012/02/04/2337791.html
總結(jié)
以上是生活随笔為你收集整理的《大话设计模式》6个原则 转帖的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win11怎么用Powershell 查
- 下一篇: 文件流下载 ASP.NET