圖解Java設(shè)計(jì)模式,輕松易懂
?


【設(shè)計(jì)模式簡(jiǎn)介】
設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐,通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_發(fā)人員所采用。設(shè)計(jì)模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。這些解決方案是眾多軟件開發(fā)人員經(jīng)過相當(dāng)長(zhǎng)的一段時(shí)間的試驗(yàn)和錯(cuò)誤總結(jié)出來的。
設(shè)計(jì)模式提供了一個(gè)標(biāo)準(zhǔn)的術(shù)語系統(tǒng),且具體到特定的情景。例如,單例設(shè)計(jì)模式意味著使用單個(gè)對(duì)象,這樣所有熟悉單例設(shè)計(jì)模式的開發(fā)人員都能使用單個(gè)對(duì)象,并且可以通過這種方式告訴對(duì)方,程序使用的是單例模式。
設(shè)計(jì)模式已經(jīng)經(jīng)歷了很長(zhǎng)一段時(shí)間的發(fā)展,它們提供了軟件開發(fā)過程中面臨的一般問題的最佳解決方案。學(xué)習(xí)這些模式有助于經(jīng)驗(yàn)不足的開發(fā)人員通過一種簡(jiǎn)單快捷的方式來學(xué)習(xí)軟件設(shè)計(jì)。
?
【設(shè)計(jì)模式七大原則】
設(shè)計(jì)模式原則,其實(shí)就是程序員在編程時(shí),應(yīng)當(dāng)遵守的原則,也是各種設(shè)計(jì)模式的基礎(chǔ)(即:設(shè)計(jì)模式為什么這樣設(shè)計(jì)的依據(jù))
設(shè)計(jì)模式常用的七大原則有:
1.????? 單一職責(zé)原則
單一職責(zé)的定義:應(yīng)該有且只有一個(gè)原因引起類的變更。換句話說就是一個(gè)接口只做一件事,即一個(gè)職責(zé)一個(gè)接口。
但是困難的是劃分職責(zé)時(shí)并沒有一個(gè)標(biāo)準(zhǔn),最終都是需要從實(shí)際的項(xiàng)目去考慮。我們?cè)谠O(shè)計(jì)的時(shí)候,盡量單一,然后對(duì)于其實(shí)現(xiàn)類就要多方面的考慮。不能死套單一職責(zé)原則,否則會(huì)增加很多類,給維護(hù)帶來不便。
2.????? 接口隔離原則
這個(gè)原則的意思是:使用多個(gè)隔離的接口,比使用單個(gè)接口要好。還是一個(gè)降低類之間的耦合度的意思,從這兒我們看出,其實(shí)設(shè)計(jì)模式就是一個(gè)軟件的設(shè)計(jì)思想,從大型軟件架構(gòu)出發(fā),為了升級(jí)和維護(hù)方便。在開發(fā)過程當(dāng)中回盡量地去降低依賴,降低耦合。
?
3.????? 依賴倒轉(zhuǎn)(倒置)原則
這個(gè)是開閉原則的基礎(chǔ),具體內(nèi)容:真對(duì)接口編程,依賴于抽象而不依賴于具體。
java中抽象指接口或抽象類,兩者都不能直接被實(shí)例化的;細(xì)節(jié)就是實(shí)現(xiàn)類,實(shí)現(xiàn)接口或者集成抽象類而產(chǎn)生的也就細(xì)節(jié),也就是可以可以加上yige 關(guān)鍵字new產(chǎn)生的對(duì)象。高層模塊就是調(diào)用端,低層模塊就是具體實(shí)現(xiàn)類。
依賴倒置原則在java中表現(xiàn)就是,模塊間依賴通過抽象發(fā)生,實(shí)現(xiàn)類之間不發(fā)生直接依賴關(guān)系,其依賴關(guān)系是通過接口或者抽象類產(chǎn)生的。如果類與類直接依賴細(xì)節(jié),那么就會(huì)直接耦合。如此一來當(dāng)修改時(shí),就會(huì)同時(shí)修改依賴者代碼,這樣限制了可拓展性。
4.????? 里氏替換原則
里氏代換原則(Liskov Substitution Principle LSP)面向?qū)ο笤O(shè)計(jì)的基本原則之一。 里氏代換原則中說,任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。
LSP是繼承復(fù)用的基石,只有當(dāng)衍生類可以替換掉基類,軟件單位的功能不受到影響時(shí),基類才能真正被復(fù)用,而衍生類也能夠在基類的基礎(chǔ)上增加新的行為。
里氏代換原則是對(duì)“開-閉”原則的補(bǔ)充。實(shí)現(xiàn)“開-閉”原則的關(guān)鍵步驟就是抽象化。而基類與子類的繼承關(guān)系就是抽象化的具體實(shí)現(xiàn),所以里氏代換原則是對(duì)實(shí)現(xiàn)抽象化的具體步驟的規(guī)范。
?
5.????? 開閉原則
開閉原則就是說對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。在程序需要進(jìn)行拓展的時(shí)候,不能去修改原有的代碼,實(shí)現(xiàn)一個(gè)熱插拔的效果。簡(jiǎn)單來說:就是為了使程序的擴(kuò)展性好,易于維護(hù)和升級(jí)。
?
6.????? 迪米特法則
一個(gè)實(shí)體應(yīng)當(dāng)盡量少的與其他實(shí)體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對(duì)獨(dú)立。
?
7.????? 合成復(fù)用原則
盡量使用依賴、聚合、組合的方式,而不是使用繼承
?
【系統(tǒng)學(xué)習(xí)并掌握Java設(shè)計(jì)模式】
尚硅谷圖解Java設(shè)計(jì)模式教程
https://www.bilibili.com/video/BV1G4411c7N4
課程詳情:
設(shè)計(jì)模式包含了大量的編程思想,講授和真正掌握并不容易,網(wǎng)上的設(shè)計(jì)模式課程不少,大多講解的比較晦澀,沒有真實(shí)的應(yīng)用場(chǎng)景和框架源碼支撐,學(xué)習(xí)后,只知其形,不知其神。知道各種設(shè)計(jì)模式,但是不知道怎么使用到真實(shí)項(xiàng)目。
本課程針對(duì)上述問題:
(1) 授課方式采用 圖解+框架源碼分析的方式,讓課程生動(dòng)有趣好理解;
(2) 系統(tǒng)全面的講解了設(shè)計(jì)模式,包括 設(shè)計(jì)模式七大原則、UML類圖-類的六大關(guān)系、23種設(shè)計(jì)模式及其分類,比如 單例模式的8種實(shí)現(xiàn)方式、工廠模式的3種實(shí)現(xiàn)方式、代理模式的3種方式、深拷貝等。
