蘭州關(guān)鍵詞優(yōu)化效果西安seo服務(wù)培訓(xùn)
這篇文章里說一下對(duì)設(shè)計(jì)模式的個(gè)人的理解。本篇文章更類似于隨筆而非技術(shù)文檔。
設(shè)計(jì)模式最早是在上個(gè)世紀(jì)就被人提出來了,如今被奉為圣經(jīng),也就是GOF等人寫的《設(shè)計(jì)模式》,其中的設(shè)計(jì)模式,是指導(dǎo)開發(fā)者如何進(jìn)行開發(fā)出高內(nèi)聚、低耦合、易擴(kuò)展的好代碼的。我在小白時(shí),時(shí)常疑惑,設(shè)計(jì)模式在開發(fā)中如何進(jìn)行落地呢?
今天把以前的疑問落在文章中,回答過去的自己吧。
首先要知道的是設(shè)計(jì)模式提出的時(shí)代背景,出在一個(gè)硅谷的黃金時(shí)代,個(gè)人開發(fā)者靠自己就可以寫出商用軟件的時(shí)代。此時(shí),如何只靠自己,寫出高內(nèi)聚、低耦合的好代碼,是那時(shí)開發(fā)者的問題。GOF等人設(shè)計(jì)模式的總結(jié),使得好的開發(fā)經(jīng)驗(yàn)得到了總結(jié),依靠這些模式,使得開發(fā)者可以更輕松的進(jìn)行設(shè)計(jì)和開發(fā)。
不過,大人,時(shí)代變了。如今已經(jīng)不是硅谷黃金時(shí)代,僅靠個(gè)人就可以實(shí)現(xiàn)一個(gè)火遍全球的商用軟件那樣英雄主義的事,不復(fù)存在,大多數(shù)開發(fā)者,只是一個(gè)開發(fā)工作中的小小的分子。我們不得不依靠大量成熟的商用中間件和框架及更易使用的高級(jí)語言,這大大加速了我們開發(fā)的速度,減輕了我們?cè)O(shè)計(jì)和開發(fā)的難度,同時(shí)意味著,我們對(duì)于設(shè)計(jì)模式的依賴,變得更小了。即使不怎么懂設(shè)計(jì)模式的小白,依靠spring boot也能快速搭建起一個(gè)web項(xiàng)目。
但是這并不意味著設(shè)計(jì)模式不存在或者無用了,設(shè)計(jì)模式實(shí)際上大量存在于框架和中間件中(只是作為java web開發(fā),一般很少會(huì)直接用到設(shè)計(jì)模式),舉例如下,
線程池、連接池,用到的是享元(Flyweight)模式
。
java和cglib的動(dòng)態(tài)代理,用的是代理(Proxy)模式
。
spring框架中的過濾器在使用時(shí),會(huì)從spring中傳個(gè)參數(shù)叫filterChain,這個(gè)用的是責(zé)任鏈(Chain of Responsibility)模式
。
實(shí)現(xiàn)了Collection接口的集合類中,都會(huì)提供一個(gè)叫做Iterator的迭代器,用于遍歷集合,用到的是迭代器(Interator)模式
。
如今用于項(xiàng)目解耦的MQ,用到的是中介者(Dediator)模式
。
zookeeper里的watcher機(jī)制,一個(gè)zk節(jié)點(diǎn)可以被多個(gè)watch關(guān)注,在變動(dòng)時(shí)觸發(fā)回調(diào),用的是觀察者(Observer)模式
。
lombok框架的builder注解,用的是建造者(Builder)模式
。
spring框架容器在注入對(duì)象時(shí),類型為single對(duì)對(duì)象進(jìn)行復(fù)用時(shí),用的是單例(Singleton)模式
。
還有我們?cè)谶M(jìn)行RPC服務(wù)提供時(shí),常常把一個(gè)api接口層的包提供出去,用的是外觀(Facade)模式
。
我們?cè)陂_發(fā)時(shí),經(jīng)常會(huì)給每個(gè)模塊的實(shí)現(xiàn)類抽象出一個(gè)接口來,規(guī)定impl類的行為,這個(gè)用的是模板方法(Template Method)模式
。
除了最后兩個(gè),web開發(fā)在開發(fā)中其實(shí)很少直接應(yīng)用設(shè)計(jì)模式。至此,以前我的疑問已經(jīng)回答了。我們是間接的應(yīng)用了設(shè)計(jì)模式的多,直接應(yīng)用設(shè)計(jì)模式的少。