java23種設計模式-前五種型模式詳解
走穿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設計模式中的五種建立型模式: