Java常用設計模式
一、單例模式(有的書上說叫單態模式其實都一樣)
該模式主要目的是使記憶體中保持1個物件。看下面的例子:
方法一
方法二
synchronized :/`sɪŋkrənaɪzd/ :Java語言的關鍵字,當它用來修飾一個方法或者一個程式碼塊的時候,能夠保證在同一時刻最多隻有一個執行緒執行該段程式碼。
當兩個併發執行緒訪問同一個物件object中的這個synchronized(this)同步程式碼塊時,一個時間內只能有一個執行緒得到執行。另一個執行緒必須等待當前執行緒執行完這個程式碼塊以後才能執行該程式碼塊。
如果你想學習Java可以來這個群,首先是二二零,中間是一四二,最後是九零六,裡面有大量的學習資料可以下載。
然而,當一個執行緒訪問object的一個synchronized(this)同步程式碼塊時,另一個執行緒仍然可以訪問該object中的非synchronized(this)同步程式碼塊。
尤其關鍵的是,當一個執行緒訪問object的一個synchronized(this)同步程式碼塊時,其他執行緒對object中所有其它synchronized(this)同步程式碼塊的訪問將被阻塞。
第三個例子同樣適用其它同步程式碼塊。也就是說,當一個執行緒訪問object的一個synchronized(this)同步程式碼塊時,它就獲得了這個object的物件鎖。結果,其它執行緒對該object物件所有同步程式碼部分的訪問都被暫時阻塞。
以上規則對其它物件鎖同樣適用.
注:這二個方法實現了一樣的功能,但個人推薦採用第一種方法。
二、工廠模式
該模式主要功能是統一提供例項物件的引用。看下面的例子:
這個是最簡單的例子了,就是通過工廠方法通過介面獲取物件的引用
三、建造模式
該模式其實就是說,一個物件的組成可能有很多其他的物件一起組成的,比如說,一個物件的實現非常複雜,有很多的屬性,而這些屬性又是其他物件的引用,可能這些物件的引用又包括很多的物件引用。封裝這些複雜性,就可以使用建造模式。
定義:
建造者模式:將一個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
實用範圍:
-
當建立複雜物件的演算法應該獨立於該物件的組成部分以及它們的裝配方式時。
-
當構造過程必須允許被構造的物件有不同表示時。
角色:
在這樣的設計模式中,有以下幾個角色:
-
Builder:為建立一個產品物件的各個部件指定抽象介面。
-
ConcreteBuilder:實現Builder的介面以構造和裝配該產品的各個部件,定義並明確它所建立的表示,並提供一個檢索產品的介面。
-
Director:構造一個使用Builder介面的物件,指導構建過程。
-
Product:表示被構造的複雜物件。ConcreteBuilder建立該產品的內部表示並定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的介面。
角色Builder:
角色ConcreteBuilder:
角色Director:
角色Product:
測試
建造者模式在使用過程中可以演化出多種形式:
如果具體的被建造物件只有一個的話,可以省略抽象的Builder和Director,讓ConcreteBuilder自己扮演指導者和建造者雙重角色,甚至ConcreteBuilder也可以放到Product裡面實現。
在《Effective Java》書中第二條,就提到“遇到多個構造器引數時要考慮用構建器”,其實這裡的構建器就屬於建造者模式,只是裡面把四個角色都放到具體產品裡面了。
如果你想學習Java可以來這個群,首先是二二零,中間是一四二,最後是九零六,裡面有大量的學習資料可以下載。
上面例子如果只製造男人,演化後如下:
測試:
四、門面模式
這個模式個人感覺像是Service層的一個翻版。比如Dao我們定義了很多持久化方法,我們通過Service層將Dao的原子方法組成業務邏輯,再通過方法向上層提供服務。門面模式道理其實是一樣的。
具體看看這個例子
雖然這個例子不全,但基本意思已經很明顯了。
五、策略模式
這個模式是將行為的抽象,即當有幾個類有相似的方法,將其中通用的部分都提取出來,從而使擴充套件更容易。
看這個例子:
加法具體策略類
除法具體策略類
乘法具體策略類
減法具體策略類
抽象策略類也可以使用介面來代替
策略環境類
測試客戶端
相關文章
- java常用的設計模式Java設計模式
- Java常用設計模式-單例模式Java設計模式單例
- Java常用設計模式之觀察者模式Java設計模式
- Java常用設計模式之工廠方法模式Java設計模式
- Java常用設計模式之抽象工廠模式Java設計模式抽象
- Java常用的設計模式有哪些?Java設計模式
- Java常用設計模式之簡單工廠模式Java設計模式
- 常用設計模式設計模式
- JavaScript常用設計模式JavaScript設計模式
- 前端常用設計模式前端設計模式
- 常用設計模式-單例模式設計模式單例
- Java設計模式——模板設計模式Java設計模式
- android常用設計模式之建造者設計模式Android設計模式
- Javascript常用的設計模式JavaScript設計模式
- js 常用的設計模式JS設計模式
- 談談Java常用類庫中的設計模式 - Part ⅠJava設計模式
- 【Java】設計模式Java設計模式
- Java 設計模式Java設計模式
- java設計模式Java設計模式
- Java——設計模式Java設計模式
- Java設計模式——命令模式Java設計模式
- Java設計模式—代理模式Java設計模式
- Java設計模式-代理模式Java設計模式
- Java設計模式:代理模式Java設計模式
- 【設計模式】最常用的設計模式之一的觀察者模式設計模式
- 設計模式_JAVA動態代理設計模式設計模式Java
- Java設計模式(工廠方法設計模式)Java設計模式
- Java設計模式1:設計模式概論Java設計模式
- Go 實現常用設計模式(九)模式Go設計模式
- Java設計模式之介面卡設計模式Java設計模式
- Java設計模式系列之單例設計模式Java設計模式單例
- JAVA設計模式之 13.命令設計模式Java設計模式
- 淺識JAVA設計模式——單例設計模式Java設計模式單例
- Java設計模式-橋接模式Java設計模式橋接
- Java設計模式---原型模式Java設計模式原型
- 【Java】設計模式--建立型模式Java設計模式
- Java設計模式–單例模式Java設計模式單例
- Java設計模式——單例模式Java設計模式單例