1、簡單工廠模式(靜態工廠方法模式)
由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類。
實例:Spring的BeanFactory
2、工廠方法模式
通常都是直接使用new關鍵字來創建新的對象,爲了將對象的創建和使用相分離,採用工廠模式,即應用程序將對象的創建及初始化職責交給工廠對象。
3、單例模式
保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
Spring中的單例模式只完成了後半句話,即提供了全局的訪問點BeanFactory,但沒有從構造器級別去控制單例,因爲Spring管理的是任意的java對象。Spring默認的bean都是singleton,可以通過singleton = "true | false" 或者 scope = "?" 來指定。
4、適配器模式
實例:Spring AOP,使用的Advice來增強被代理類的功能,實現AOP的原理就是使用代理模式(JDK動態代理或CGLib字節碼生成技術代理)對類進行方法級別的切面增強,即生成目標類的代理類,在代理類的方法前,進行攔截,增強了代理類的功能,實現了面向切面編程。
5、包裝器模式(裝飾器模式)
動態的給一個對象添加一些額外的職責。
Spring中用到的包裝器模式在類名有兩種表現:一種是類名中含有Wrapper,一種是類名中含有Decorator。
6、代理模式
爲其他對象提供一種代理來控制對這個對象的訪問。
區別:代理模式是一種對功能的限制,而裝飾器模式是增加職責。
實例:JdkDynamicAopProxy、Cglib2AopProxy
7、觀察者模式
定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新。
實例:ApplicationListener
8、策略模式
定義一系列的算法,把他們一個個封裝起來,並且使他們可相互替換。
實例:SimpleInstantiationStrategy
9、模板方法
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
實例:JdbcTemplate