1.什么是設(shè)計模式?
在我的理解中設(shè)計模式是一種抽象設(shè)計的方法(面向?qū)ο蟠撮希M件分裝箩做,設(shè)計模式,架構(gòu)模式)妥畏。
說說這幾種的不同之處邦邦。這幾種抽象方法是由小至大,由內(nèi)至外醉蚁,由細(xì)節(jié)至整體的燃辖。
面向?qū)ο蟾嗟氖钦Z法上的抽象,通過繼承(復(fù)用現(xiàn)有代碼)网棍,封裝(隱藏內(nèi)部實(shí)現(xiàn))黔龟,多態(tài)(改寫對象行為),模板等特性將程序中功能相似或者實(shí)現(xiàn)目標(biāo)相似的這一類東西包裝成一個整體滥玷,一個對象稱之為面向?qū)ο缶幊獭?/p>
而組件封裝是讓不同對象各司其職氏身,從而達(dá)到松耦合。
設(shè)計模式是將解決某一類常常碰到的問題最好的解決方案惑畴、設(shè)計經(jīng)驗(yàn)的總結(jié)蛋欣。
而架構(gòu)模式則是對一整個項(xiàng)目的架構(gòu)做出最好的解決方法。
這些事情的核心就是復(fù)用代碼如贷,從復(fù)雜的代碼中抽象出最好的陷虎、不變的方法套用到其他的程序中到踏,大大降低了程序需求變化所付出的代價(將代價減為最小)尚猿,解放了生產(chǎn)力窝稿。
2.面向?qū)ο笤O(shè)計原則(重要)
1.依賴倒置原則(DIP)
1.高層模塊(穩(wěn)定)不應(yīng)該依賴于底層模塊(變化),二者都應(yīng)該依賴于抽象
2.抽象(穩(wěn)定)不應(yīng)該依賴于實(shí)現(xiàn)細(xì)節(jié)(變化)凿掂,實(shí)現(xiàn)細(xì)節(jié)應(yīng)該依賴于抽象(穩(wěn)定)
簡單來說就是變化的要依賴穩(wěn)定的伴榔,實(shí)現(xiàn)細(xì)節(jié)要依賴高層的(聲明抽象調(diào)用)。這樣子當(dāng)程序需求改變使我們只需要在特定的某個模塊(實(shí)現(xiàn)細(xì)節(jié)的模塊)更改代碼缠劝,而不需要在許多的文件中都要更改代碼(這樣做的話一定是高層依賴于細(xì)節(jié)了潮梯,要更改設(shè)計模式甚至重構(gòu)代碼)。
2.開放封閉原則
1.對擴(kuò)張開放惨恭,對更改封閉
2.類模塊應(yīng)該是可擴(kuò)展的,但是不可修改
這一點(diǎn)仔細(xì)想想就是對上一點(diǎn)的另一種表述耙旦,高層模塊應(yīng)該是穩(wěn)定的(封閉不可修改的)脱羡,而擴(kuò)張是開放的,可擴(kuò)展的(可以想為實(shí)現(xiàn)細(xì)節(jié)免都,像繼承和派生)
3.單一職業(yè)原則(SRP)
1.一個類應(yīng)該僅有一個引起它變化的原因
2.變化的方向隱含類的責(zé)任
每個類應(yīng)該只能完成一個具體的功能锉罐,做一種單一的job。這樣使得這個類在需要維護(hù)時更加簡便绕娘。
4.Liskov替換原則(LSP)
1.子類必須能夠替換他們的基類(IS-A)
2.繼承表達(dá)類型抽象
子類方法要是父類方法拓展中的一種
子類可以擴(kuò)展父類的功能脓规,但不能改變父類原有的功能
子類可以實(shí)現(xiàn)父類的抽象方法,但不能覆蓋父類的非抽象方法险领。
子類中可以增加自己特有的方法侨舆。
當(dāng)子類的方法重載父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入?yún)?shù)更寬松绢陌。
當(dāng)子類的方法實(shí)現(xiàn)父類的抽象方法時挨下,方法的后置條件(即方法的返回值)要比父類更嚴(yán)格。
5.接口隔離原則(ISP)
1.不應(yīng)該強(qiáng)迫客戶程序依賴它們不用的方法
2.接口應(yīng)該小而完備
一種接口只做一件事脐湾。
6.優(yōu)先使用對象組合臭笆,而不是類繼承
1.類繼承通常為“白箱服用”,對象組合通常為黑箱復(fù)用
2.繼承在某種程序上破壞了封裝性秤掌,子類父類耦合度高
3.而在對象組合則只要求被組合的對象具有良好的定義的接口愁铺,耦合度低
7.分裝變化點(diǎn)
1.使用封裝來創(chuàng)建對象之間的分界層,讓設(shè)計者可以在分界層的一側(cè)進(jìn)行修改闻鉴,而不會對另一側(cè)產(chǎn)生不良的影響茵乱,從而實(shí)現(xiàn)層次間的松耦合
8.針對接口編程,而不是針對實(shí)現(xiàn)編程
1.不降變量類型聲明為某個特定的具體類椒拗,而是聲明為某個接口
2.客戶程序無需獲知對象的具體類型似将,只需要知道對象所具有的接口
3.減少系統(tǒng)中各部分的依賴關(guān)系获黔,從而實(shí)現(xiàn)“高內(nèi)聚,松耦合”的類型設(shè)計方案
上面三點(diǎn)不做補(bǔ)充說明了在验,說得很明白了玷氏。