整體來講分爲3類:安全
建立型:工廠方法模式、抽象工廠模式、單例、建造者、原型多線程
結構型:適配器、裝飾器、代理、外觀、橋接、組合、享元jvm
行爲型:策略、模板方法、觀察者、迭代子、責任鏈、命令、備忘錄、狀態、訪問者、中介者、解釋器函數
工廠方法模式和抽象工廠模式ui
要點:其實這兩種模式在我看來並沒有太大的不一樣,2個要點,對象不是new出來的(固然只是看起來不是new出來的),而是經過工廠類建立的,建立的是同一接口不一樣實現class的實例。那麼具體返回哪一個實現類的實例,要麼經過參數不一樣來區分,要麼經過方法不一樣來區分,要麼經過類不一樣來區分,反正總要分出來。線程
典型場景:須要常常性的建立同一類型的對象代理
難易程度:比較簡單對象
普遍程度:很是普遍接口
單例get
要點:保證一個類的實例,在一個jvm當中,只有一份,簡單的單例實現,包括一個私有的構造函數,一個靜態私有的類對象(instance),一個靜態共有的getInstance方法,可是這種方法在多線程環境下是不安全的,有可能這個instance對象會被實例化多份。能夠經過 synchronized 來保證線程安全,也能夠經過靜態內部類(內部類是延遲加載的,能夠保證在第一次用到的時候才實例化instance)持有這個instance來保證線程安全。
典型場景:某一個類的對象,系統當中只須要一份
難易程度:稍顯困難(考慮線程安全的狀況下)
普遍程度:很是普遍
Builder
其實,builder和factory是有其類似之處的,區別在於,factory模式當中,其實只有2類角色,工廠和產品。而在builder當中,包括了3個角色,指揮者、構造者、產品。用於建立較爲複雜的對象,同時清楚地體現其中的建立過程。
典型場景:對複雜對象的建立
難易程度:稍顯困難
普遍程度:比較普遍
原型
經過clone的方式,獲取對象。淺克隆:調用Object的clone方法,對於對象內部的對象,不會進行克隆;深克隆:能夠經過序列化的方式來實現,對於對象內部的對象,也會進行克隆。
典型場景:類似對象的建立
難易程度:深克隆的實現稍顯困難
普遍程度:不太普遍