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