Spring中的9種設計模式彙總

Java和Android架構發表於2019-01-04

640?wx_fmt=gif

熱文導讀 | 點選標題閱讀

金九銀十跳槽季如何進階找到合適滿意的工作?

30歲的職場危機,人生下半場的困局

凜冬將至?對網際網路行業人員流動性的一些看法(深度好文)

1. 簡單工廠

又叫做靜態工廠方法(StaticFactory Method)模式,但不屬於23種GOF設計模式之一。

簡單工廠模式的實質是由一個工廠類根據傳入的引數,動態決定應該建立哪一個產品類。

Spring中的BeanFactory就是簡單工廠模式的體現,根據傳入一個唯一的標識來獲得Bean物件,但是否是在傳入引數後建立還是傳入引數前建立這個要根據具體情況來定。

 

 

2. 工廠方法(Factory Method)

定義一個用於建立物件的介面,讓子類決定例項化哪一個類。Factory Method使一個類的例項化延遲到其子類。

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

640?wx_fmt=png

 

3. 單例(Singleton)

保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。

Spring中的單例模式完成了後半句話,即提供了全域性的訪問點BeanFactory。但沒有從構造器級別去控制單例,這是因為Spring管理的是是任意的Java物件。

 

4. 介面卡(Adapter)

將一個類的介面轉換成客戶希望的另外一個介面。Adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。

Spring中在對於AOP的處理中有Adapter模式的例子,見如下圖:640?wx_fmt=png

由於Advisor鏈需要的是MethodInterceptor(攔截器)物件,所以每一個Advisor中的Advice都要適配成對應的MethodInterceptor物件。

 

 

5.包裝器(Decorator)

動態地給一個物件新增一些額外的職責。就增加功能來說,Decorator模式相比生成子類更為靈活。

640?wx_fmt=png

Spring中用到的包裝器模式在類名上有兩種表現:一種是類名中含有Wrapper,另一種是類名中含有Decorator。基本上都是動態地給一個物件新增一些額外的職責。

 

 

6. 代理(Proxy)

為其他物件提供一種代理以控制對這個物件的訪問。

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

640?wx_fmt=png

Spring的Proxy模式在aop中有體現,比如JdkDynamicAopProxy和Cglib2AopProxy。

 

 

7.觀察者(Observer)

定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。

640?wx_fmt=png

Spring中Observer模式常用的地方是listener的實現。如ApplicationListener。

 

 

 

8. 策略(Strategy)

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

Spring中在例項化物件的時候用到Strategy模式,見如下圖:

640?wx_fmt=png

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

640?wx_fmt=png

 

 

 

9.模板方法(Template Method)

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

Template Method模式一般是需要繼承的。這裡想要探討另一種對Template Method的理解。Spring中的JdbcTemplate,在用這個類時並不想去繼承這個類,因為這個類的方法太多,但是我們還是想用到JdbcTemplate已有的穩定的、公用的資料庫連線,那麼我們怎麼辦呢?我們可以把變化的東西抽出來作為一個引數傳入JdbcTemplate的方法中。但是變化的東西是一段程式碼,而且這段程式碼會用到JdbcTemplate中的變數。怎麼辦?那我們就用回撥物件吧。在這個回撥物件中定義一個操縱JdbcTemplate中變數的方法,我們去實現這個方法,就把變化的東西集中到這裡了。然後我們再傳入這個回撥物件到JdbcTemplate,從而完成了呼叫。這可能是Template Method不需要繼承的另一種實現方式吧。

以下是一個具體的例子:

JdbcTemplate中的execute方法:

640?wx_fmt=png

JdbcTemplate執行execute方法:

640?wx_fmt=png

想進阿里嗎?快加入我們的知識星球吧,如下:

640?wx_fmt=gif

如有收穫,歡迎分享 640?wx_fmt=jpeg

「點贊640?「評論 640?wx_fmt=jpeg

 媽媽常教導我,讓我養成良好習慣。這樣長大才能成為一個有用的人。良好的習慣是尊敬師長這樣長大才能成為一個有用的人。良好的習慣是尊敬師長,愛護同學,對人有禮貌;是不粗心,做事情不拖拉;還是愛護公物,不浪費糧食。為什麼呢?因為擁有良好習慣,做一個品德高尚的人,懂得尊重別人,才會得到別人的尊重。我要努力地做到這些。我有一些壞習慣,有時候學習很粗心,把一些會做的題做錯。在生活上,也很粗心,有一次早上起床居然穿反了衣服。我吃飯很慢,有的時候還剩飯。我還起床磨蹭,本來應該迅速地穿好衣服,但是,我總是磨磨蹭蹭地,速度很慢。我打算在這學期裡,改掉這些壞習慣。早上起來,迅速地穿好衣服,不拖拉。學習不粗心,仔細完成每一道題。吃飯的時候,要很快的把飯吃完,不剩飯。我要從一點一滴做起,逐漸養成良好習慣。我相信自己一定能成為一名品學兼優的好學生!我打算在這學期裡,改掉這些壞習慣。早上起來,迅速地穿好衣服,不拖拉。學習不粗心,仔細完成每一道題。吃飯的時候,要很快的把飯吃完,不剩飯。我要從一點一滴做起,逐漸養成良好習慣。我相信自己一定能成為一名品學兼優的好學生!  在上幼兒園以前,我什麼也不會幹,就連穿衣服也是媽媽給我穿好,就要上幼兒園了,這樣可不行,媽媽鍛鍊我要學會自己穿衣服。   有一天,媽媽把衣服擺在我面前,開始讓我自己穿。一開始。我又哭又叫就是不穿,還把衣服扔的滿地都是,然後坐在地上開始大哭,等了好長時間,媽媽還是不理我,我只好自己乖乖的把衣服穿好, 一出了房間門,媽媽就笑了起來,再看看我的衣服,毛衣和褲子都穿反了,我趕緊回房間又重新穿了一遍,這次穿好了,拿起外套,可是外套的扣子又扣不上了,釦子可調皮了,好像故意和我作對,我把釦子往釦眼——人類邪惡的根源;愛情——幸福和光明的源泉。我一直在這些思想的舞臺上徘徊。突然我發現兩個身影從我面前經過,坐在不遠的草地上。這是一對從農田那邊走過來的青年男女。農田那邊有農民的茅舍。在一陣令人傷心的沉默之後,隨著一聲長嘆,我聽見從一個肺癆病人的嘴裡說出了這樣的話:幸福和光明的源泉。我一直在這些思想的舞臺上徘徊。突然我發現兩個身影從我面前經過,坐在不遠的草地上。這是一對從農田那邊走過來的青年男女。農田那邊有農民的茅舍。在一陣令人傷心的沉默之後,隨著一聲長嘆,我聽見從一個肺癆病人的嘴裡說出了這樣的話幸福和光明的源泉。我一直在這些思想的舞臺上徘徊。突然我發現兩個身影從我面前經過,坐在不遠的草地上。這是一對從農田那邊走過來的青年男女。農田那邊有農民的茅舍。在一陣令人傷心的沉默之後,隨著一聲長嘆,我聽見從一個肺癆病人的嘴裡說出了這樣的話幸福和光明的源泉。我一直在這些思想的舞臺上徘徊。突然我發現兩個身影從我面前經過,坐在不遠的草地上。這是一對從農田那邊走過來的青年男女。農田那邊有農民的茅舍。在一陣令人傷心的沉默之後,隨著一聲長嘆,我聽見從一個肺癆病人的嘴裡說出了這樣的話幸福和光明的源泉。我一直在這些思想的舞臺上徘徊。突然我發現兩個身影從我面前經過,坐在不遠的草地上。這是一對從農田那邊走過來的青年男女。農田那邊有農民的茅舍。在一陣令人傷心的沉默之後,隨著一聲長嘆,我聽見從一個肺癆病人的嘴裡說出了這樣的話幸福和光明的源泉。我一直在這些思想的舞臺上徘徊。突然我發現兩個身影從我面前經過,坐在不遠的草地上。這是一對從農田那邊走過來的青年男女。農田那邊有農民的茅舍。在一陣令人傷心的沉默之後,隨著一聲長嘆,我聽見從一個肺癆病人的嘴裡說出了這樣的話幸福和光明的源泉。我一直在這些思想的舞臺上徘徊。突然我發現兩個身影從我面前經過,坐在不遠的草地上。這是一對從農田那邊走過來的青年男女。農田那邊有農民的茅舍。在一陣令人傷心的沉默之後,隨著一聲長嘆,我聽見從一個肺癆病人的嘴裡說出了這樣的話幸福和光明的源泉。我一直在這些思想的舞臺上徘徊。突然我發現兩個身影從我面前經過,坐在不遠的草地上。這是一對從農田那邊走過來的青年男女。農田那邊有農民的茅舍。在一陣令人傷心的沉默之後,隨著一聲長嘆,我聽見從一個肺癆病人的嘴裡說出了這樣的話幸福和光明的源泉。我一直在這些思想的舞臺上徘徊。突然我發現兩個身影從我面前經過,坐在不遠的草地上。這是一對從農田那邊走過來的青年男女。農田那邊有農民的茅舍。在一陣令人傷心的沉默之後,隨著一聲長嘆,我聽見從一個肺癆病人的嘴裡說出了這樣的話親愛的!擦乾你的眼淚,至高無上的愛情已經開啟了我們的眼界,使我們成了它的崇拜者。是它,





 媽媽常教導我,讓我養成良好習慣。這樣長大才能成為一個有用的人。良好的習慣是尊敬師長這樣長大才能成為一個有用的人。良好的習慣是尊敬師長,愛護同學,對人有禮貌;是不粗心,做事情不拖拉;還是愛護公物,不浪費糧食。為什麼呢?因為擁有良好習慣,做一個品德高尚的人,懂得尊重別人,才會得到別人的尊重。我要努力地做到這些。我有一些壞習慣,有時候學習很粗心,把一些會做的題做錯。在生活上,也很粗心,有一次早上起床居然穿反了衣服。我吃飯很慢,有的時候還剩飯。我還起床磨蹭,本來應該迅速地穿好衣服,但是,我總是磨磨蹭蹭地,速度很慢。我打算在這學期裡,改掉這些壞習慣。早上起來,迅速地穿好衣服,不拖拉。學習不粗心,仔細完成每一道題。吃飯的時候,要很快的把飯吃完,不剩飯。我要從一點一滴做起,逐漸養成良好習慣。我相信自己一定能成為一名品學兼優的好學生!我打算在這學期裡,改掉這些壞習慣。早上起來,迅速地穿好衣服,不拖拉。學習不粗心,仔細完成每一道題。吃飯的時候,要很快的把飯吃完,不剩飯。我要從一點一滴做起,逐漸養成良好習慣。我相信自己一定能成為一名品學兼優的好學生!  在上幼兒園以前,我什麼也不會幹,就連穿衣服也是媽媽給我穿好,就要上幼兒園了,這樣可不行,媽媽鍛鍊我要學會自己穿衣服。   有一天,媽媽把衣服擺在我面前,開始讓我自己穿。一開始。我又哭又叫就是不穿,還把衣服扔的滿地都是,然後坐在地上開始大哭,等了好長時間,媽媽還是不理我,我只好自己乖乖的把衣服穿好, 一出了房間門,媽媽就笑了起來,再看看我的衣服,毛衣和褲子都穿反了,我趕緊回房間又重新穿了一遍,這次穿好了,拿起外套,可是外套的扣子又扣不上了,釦子可調皮了,好像故意和我作對,我把釦子往釦眼——人類邪惡的根源;愛情——幸福和光明的源泉。我一直在這些思想的舞臺上徘徊。突然我發現兩個身影從我面前經過,坐在不遠的草地上。這是一對從農田那邊走過來的青年男女。農田那邊有農民的茅舍。在一陣令人傷心的沉默之後,隨著一聲長嘆,我聽見從一個肺癆病人的嘴裡說出了這樣的話:親愛的!擦乾你的眼淚,至高無上的愛情已經開啟了我們的眼界,使我們成了它的崇拜者。是它,

你有好的文章想和大家分享歡迎投稿,直接向我投遞文章連結即可


最後,國慶福利來了,我們的知識星球已達到1000人了,之前說過到達1000人時將大大幅漲價到169元,為了反饋大家對我們的關注和厚愛,特此維持現價99元最後一天,今天后(今晚 00:00)後將漲到169元,歡迎大家加入我們的知識星球,更多星球資訊參見:

如何進階成為Java和Android架構師?

金九銀十跳槽季如何進階找到合適滿意的工作?

說兩件事

640?wx_fmt=jpeg

微信掃描或者點選上方二維碼領取Android\Python\AI\Java等高階進階資源

更多學習資料點選下面的“閱讀原文”獲取

640?wx_fmt=gif

相關文章