走穿23種設計模式-前五種,建立型模式詳解
總體來說設計模式分為三大類(23種):
建立型模式,共五種:
單例模式、工廠方法模式、抽象工廠模式、建造者模式、原型模式。
結構型模式,共七種。
擴充卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
行為型模式,共十一種。
政策模式、模闆方法模式、觀察者模式、疊代子模式、責任鍊模式、指令模式、備忘錄模式、狀态模式、通路者模式、中介者模式、解釋器模式。
其實還有兩類特殊的模式:并發型模式和線程池模式。
很多人隻知道一兩種設計模式,單例模式和工廠模式,而且有很多人不知道工廠模式還有分類:工廠方法模式和抽象工廠模式。本文帶你完全的學習一下這建立類型的五種模式,并進行詳細總結,看完這篇文章,你都可以說你已經深入了解過5種設計模式以上了。
建立型的五種設計模式(Pattern)概念
單例模式(Singleton)
單例模式中一個類隻有一個執行個體,而且這個類執行個體化一次後并向整個系統提供這個執行個體對象。
單利模式減少記憶體開支,避免對資源的多重占用,優化并共享資源通路,當單利模式擴充難,不易測試。
工廠方法模式(Factory Method)
工廠方法模式定義一個建立産品對象的工廠接口,将實際建立工作推遲到子類中。
抽象工廠模式(Abstract Factory)
工廠方法模式的更新,它為建立一組相關或互相依賴的對象提供一個接口,而且無需指定它們的具體類。
建造者模式(Builder)
也叫生成器模式,將一個複制對象的建構與其表示分類,使得同樣的建構過程可以建立不同的表示。
原型模式(Prototype)
用原型模式指定建立對象的種類,并通過拷貝這些原型建立新的對象。
上面就是建立型設計模式的幾個概念,你要了解這幾個設計模式,你必須是要熟記并了解這幾個概念。
沒錯就是背誦下來這幾個模式的概念,很多時候别人問你設計模式,如果不探讨太多,你把設計模式的概念說給他知道,再進行一些簡單的分析,這已經夠了。
建立型的五種設計模式的類圖
1.單例模式了類圖
2.工廠方法模式了類圖
3.抽象工廠模式了類圖
4.建造者模式了類圖
5.原型模式了類圖
建立型的五種設計模式分析
單例模式
單例模式就是執行個體化一次後,這個類的對象以後都不需要執行個體化,并且可以全局使用。
單例模式有兩種實作:餓漢式單例模式和懶漢式單例模式。
餓漢式單例模式就是:把執行個體化在類的成員變量建構的時候就去執行個體化,這樣在任何時候調用這個類的對象都是建立好的,随時可以擷取到的,因為餓,所有要馬上擷取到。。。
懶漢式單例模式就是:當這個類對象第一次調用的時候才進行執行個體化,快要用的時候才去搞,這就比較懶了!
這裡懶漢式單例模式還可能存線上程問題,也就是多個地方同時要調用這個單例對象,會出現多個執行個體化的對象,所有要把執行個體化的語句加個同步鎖。
單例模式還有一個登記式單例模式,但是基本沒人用,主要的代碼太麻煩了,不好了解。
單例模式在Android大程式設計中基本都是用到的,繼承了Application的類,就是程式剛開始的時候建立的類,可以存取一些全局的屬性。
工廠方法模式
結合工廠方法模式的概念和類圖,你看到子類實作父類的方法,然後調用父類的方法來實作具體操作,這就是工廠方法。
其實就是java繼承和多态的具體表現!
抽象工廠模式
抽象工廠模式的定義:為建立一組相關或互相依賴的對象提供一個接口,而且無需指定它們的具體類。
同時你也可以對比一下工廠方法模式的定義:為某個對象提供一個接口,而且無需指定它們的具體類。
都是子類實作接口的方法,并在子類寫具體的代碼。這裡抽象工廠的接口類是能建立多個相關的對象,而工廠方法的接口類是隻建立一個對象。
如果抽象工廠模式的抽象工廠接口類隻建立一個對象,那麼它就是工廠方法模式。
當一個對象都有相同的限制時,可以使用抽象工廠模式。
打個比方說,這個工廠的幾個産品都需要經過某些共同的步驟和打上相同的商标,這一組産品可以在一個工廠裡面生産,減少很多重複的代碼在不同的地方都出現多次。
當然你把這幾個産品分到幾個工廠去生産也是可以的,就是會造成一個資源重複建造。
建造者模式
将一個複雜對象的建構與它的表示分離,使得同樣的建構過程可以建立不同的表示。
這裡給大家分析一下:
定義的前半句說,構造與表示分離,其實就是繼承(或實作)。
兩種工廠模式也都是為某個對象提供一個接口,而且無需指定它們的具體類。
是以建造者模式的重點是後半句:同樣的建構過程可以建立不同的結果。
建造者模式其實和工廠方法模式有很多的類似的地方,這個要看代碼的實作做比較。
原型模式
用原型執行個體指定建立對象的種類,并且通過複制這些原型建立新的對象。
java中内置了克隆機制。Object類具有一個clone()方法,能夠實作對象的克隆。
使一個類支援克隆隻需要兩步。
1.實作接口Cloneable類
2.覆寫Object的clone()方法,完成對象的克隆操作,通常隻需要調用Object的clone()方法即可。
上面就是設計模式中的五種建立型的模式,其實重點還是要了解概念,并會做一點解釋就可以了。
如果要深入了解一些,可以看我之前寫的介紹,都有實際執行個體和代碼解釋java設計模式中的五種建立型模式:
原型模式:http://blog.csdn.net/wenzhi20102321/article/details/78167984
建造者模式:http://blog.csdn.net/wenzhi20102321/article/details/78163855
抽象工廠模式:http://blog.csdn.net/wenzhi20102321/article/details/78153437
工廠方法模式:http://blog.csdn.net/wenzhi20102321/article/details/78129065
可以仔細對比一下工廠方法模式和抽象工廠模式,看看概念,看看類圖,看看代碼,就會明白了。
單例模式:http://blog.csdn.net/wenzhi20102321/article/details/77882203
java 23種設計模式介紹:http://blog.csdn.net/wenzhi20102321/article/details/54601909