創建型 單例模式 餓漢式 懶漢式 雙重校驗鎖 工廠模式 圖例 簡單工廠模式 工廠模式 簡單工廠VS工廠 相同 : 工廠負責產品類的創建,使用者需要使用產品類的時候直接請求工廠就與產品類複雜的創建和實現分離了,只關註它的介面,只要它的介面滿足使用者要求就不會影響上層模塊,後期當產品類變化時,維護起來也 ...
創建型
單例模式
餓漢式
public class Singleton () { private static Singleton instance = new Singleton(); private Singleton(){ } public static Singleton getInstance() { return instance; } }
懶漢式
public class Singleton { private static Singleton instance = null; private Singleton() { } public static synchronized Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } }
雙重校驗鎖
public class Singleton { private static volatile Singleton instance = null; private Singleton() { } public static Singleton getInstance() { if(instance == null) { synchronized(Singleton.class) { if(instance == null) { instance = new Singleton(); } } } return instance; } }
工廠模式
圖例
簡單工廠模式
工廠模式
簡單工廠VS工廠
相同:
工廠負責產品類的創建,使用者需要使用產品類的時候直接請求工廠就與產品類複雜的創建和實現分離了,只關註它的介面,只要它的介面滿足使用者要求就不會影響上層模塊,後期當產品類變化時,維護起來也比較方便
不同:
簡單工廠:一個工廠類負責所有產品的生產,當有新的子類產品時,需要修改工廠類,這違背了開閉原則
工廠:抽象出了一個抽象工廠類,每個實際工廠類對應一個實際產品的生產,當有新的子類產品時,只需增加工廠子類即可,增加了靈活性
抽象工廠模式
結構型
適配器模式
裝飾者模式
外觀模式
代理模式
行為型
策略模式
模版模式
Spring中的設計模式
模板方法模式以及hook方法的應用:
BeanFactory提供了getBean介面,在子類AbstractBeanFactory中重寫了getBean,具體內容是bean沒有實例化對象的話,就先實例化再依賴註入,依賴註入需要調用applyProperty函數,在AbstractBeanFactory中該函數為空,留給子類來實現。比如對於構造註入,setter註入,Field註入寫不同的實現類工廠方法模式的應用:
Spring的主要思想ioc就是指將對象的創建權利移交給工廠,主要實現是: BeanFactory是個抽象工廠,其子類實現getBean方法決定如何對類進行實例化並返回對象,使用者需要某個對象的時候直接請求BeanFactory讓它去載入,就與該類複雜的創建和實現分離了,使用者只關註它的介面,只要它的介面滿足使用者要求就不會影響上層模塊,後期當產品類變化時,維護起來也比較方便外觀(門面)模式的運用:
Spring有幾個重要的模塊:比如Resouce,BeanDefinitionReader,BeanFactory,ApplicationContext集成了這幾個模塊的功能,直接通過ApplicationContext就可以對資源進行定位,載入,管理代理模式的運用:
通過jdk的動態代理:jdk的動態代理是基於介面的,被代理類必須實現了某一個或多個任意介面才可以被代理,並且只有這些介面中的方法會被代理。
通過cglib動態代理:cglib是針對類來實現代理的,他的原理是對指定的目標類生成一個子類,並覆蓋其中的方法實現增強,但因為採用的是繼承,所以不能對final修飾的類進行代理。單例模式的運用:
Spring中如果指定bean的類型為singleton,那麼每次getBean會從hashmap中取,如果取不到先就實例化後放入hashmap中去策略模式:
Spring對資源訪問的封裝是策略模式的經典實現,spirng使用Resource介面來抽象資源,代表資源訪問策略,其子類分別實現了不同的策略,例如:UrlResource:訪問網路資源的實現類。ClassPathResource:訪問類路徑資源。FileSystemResource:訪問文件系統資源。客戶端程式只和 Resource 介面耦合,而與具體的訪問策略解耦,可以在策略之中自由切換。