詳解Spring中的9種設計模式【記得收藏】

一. 簡單工廠

又叫做靜態(tài)工廠方法(StaticFactory Method)模式,但不屬于23種GOF設計模式之一剿另。

簡單工廠模式的實質(zhì)是由一個工廠類根據(jù)傳入的參數(shù)掸刊,動態(tài)決定應該創(chuàng)建哪一個產(chǎn)品類。

Spring中的BeanFactory就是簡單工廠模式的體現(xiàn)蜓堕,根據(jù)傳入一個唯一的標識來獲得Bean對象蜂嗽,但是否是在傳入?yún)?shù)后創(chuàng)建還是傳入?yún)?shù)前創(chuàng)建這個要根據(jù)具體情況來定苗膝。

二. 工廠方法(Factory Method)

定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類植旧。Factory Method使一個類的實例化延遲到其子類辱揭。

Spring中的FactoryBean就是典型的工廠方法模式。如下圖:

三. 單例(Singleton)

保證一個類僅有一個實例隆嗅,并提供一個訪問它的全局訪問點界阁。

Spring中的單例模式完成了后半句話,即提供了全局的訪問點BeanFactory胖喳。但沒有從構造器級別去控制單例泡躯,這是因為Spring管理的是是任意的Java對象。

四. 適配器(Adapter)

將一個類的接口轉換成客戶希望的另外一個接口丽焊。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作较剃。
Spring中在對于AOP的處理中有Adapter模式的例子,見如下圖:
由于Advisor鏈需要的是MethodInterceptor(攔截器)對象技健,所以每一個Advisor中的Advice都要適配成對應的MethodInterceptor對象写穴。

五.包裝器(Decorator)

動態(tài)地給一個對象添加一些額外的職責。就增加功能來說雌贱,Decorator模式相比生成子類更為靈活啊送。

Spring中用到的包裝器模式在類名上有兩種表現(xiàn):一種是類名中含有Wrapper,另一種是類名中含有Decorator欣孤〔雒唬基本上都是動態(tài)地給一個對象添加一些額外的職責。

六. 代理(Proxy)

為其他對象提供一種代理以控制對這個對象的訪問降传。

從結構上來看和Decorator模式類似篷朵,但Proxy是控制,更像是一種對功能的限制,而Decorator是增加職責声旺。

Spring的Proxy模式在aop中有體現(xiàn)笔链,比如JdkDynamicAopProxy和Cglib2AopProxy。

七.觀察者(Observer)

定義對象間的一種一對多的依賴關系腮猖,當一個對象的狀態(tài)發(fā)生改變時鉴扫,所有依賴于它的對象都得到通知并被自動更新。

Spring中Observer模式常用的地方是listener的實現(xiàn)缚够。如ApplicationListener幔妨。

八. 策略(Strategy)

定義一系列的算法,把它們一個個封裝起來谍椅,并且使它們可相互替換。本模式使得算法可獨立于使用它的客戶而變化古话。

Spring中在實例化對象的時候用到Strategy模式雏吭,見如下圖:

在SimpleInstantiationStrategy中有如下代碼說明了策略模式的使用情況:

九.模板方法(Template Method)

定義一個操作中的算法的骨架,而將一些步驟延遲到子類中陪踩。Template Method使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟杖们。

Template Method模式一般是需要繼承的。這里想要探討另一種對Template Method的理解肩狂。Spring中的JdbcTemplate摘完,在用這個類時并不想去繼承這個類,因為這個類的方法太多傻谁,但是我們還是想用到JdbcTemplate已有的穩(wěn)定的孝治、公用的數(shù)據(jù)庫連接,那么我們怎么辦呢审磁?我們可以把變化的東西抽出來作為一個參數(shù)傳入JdbcTemplate的方法中谈飒。但是變化的東西是一段代碼,而且這段代碼會用到JdbcTemplate中的變量态蒂。怎么辦杭措?那我們就用回調(diào)對象吧。在這個回調(diào)對象中定義一個操縱JdbcTemplate中變量的方法钾恢,我們?nèi)崿F(xiàn)這個方法手素,就把變化的東西集中到這里了。然后我們再傳入這個回調(diào)對象到JdbcTemplate瘩蚪,從而完成了調(diào)用泉懦。這可能是Template Method不需要繼承的另一種實現(xiàn)方式吧。

以下是一個具體的例子:

JdbcTemplate中的execute方法

JdbcTemplate執(zhí)行execute方法

寫在最后

最后募舟,歡迎做Java的工程師朋友們加入Java高級架構進階Qqun:963944895

群內(nèi)有技術大咖指點難題祠斧,還提供免費的Java架構學習資料(里面有高可用、高并發(fā)拱礁、高性能及分布式琢锋、Jvm性能調(diào)優(yōu)辕漂、Spring源碼,MyBatis吴超,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)

比你優(yōu)秀的對手在學習钉嘹,你的仇人在磨刀,你的閨蜜在減肥鲸阻,隔壁老王在練腰跋涣, 我們必須不斷學習,否則我們將被學習者超越鸟悴!

趁年輕陈辱,使勁拼,給未來的自己一個交代细诸!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沛贪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子震贵,更是在濱河造成了極大的恐慌利赋,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猩系,死亡現(xiàn)場離奇詭異媚送,居然都是意外死亡,警方通過查閱死者的電腦和手機寇甸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門塘偎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人幽纷,你說我怎么就攤上這事式塌。” “怎么了友浸?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵峰尝,是天一觀的道長。 經(jīng)常有香客問我收恢,道長武学,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任伦意,我火速辦了婚禮火窒,結果婚禮上,老公的妹妹穿的比我還像新娘驮肉。我一直安慰自己熏矿,他們只是感情好,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著票编,像睡著了一般褪储。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上慧域,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天鲤竹,我揣著相機與錄音,去河邊找鬼昔榴。 笑死辛藻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的互订。 我是一名探鬼主播吱肌,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屁奏!你這毒婦竟也來了岩榆?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤坟瓢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后犹撒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體折联,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年识颊,在試婚紗的時候發(fā)現(xiàn)自己被綠了诚镰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡祥款,死狀恐怖清笨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刃跛,我是刑警寧澤抠艾,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站桨昙,受9級特大地震影響检号,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛙酪,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一齐苛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桂塞,春花似錦凹蜂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汰瘫。三九已至,卻和暖如春卿啡,著一層夾襖步出監(jiān)牢的瞬間吟吝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工颈娜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留剑逃,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓官辽,卻偏偏與公主長得像蛹磺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子同仆,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容