Spring 設(shè)計模式總結(jié)
1.簡單工廠 - BeanFactory
2.工廠方法 - FactoryBean
3.單例模式 - Bean實例
在我們的系統(tǒng)中,有一些對象其實我們只需要一個,比如說:線程池、緩存、對話框、注冊表、日志對象、充當(dāng)打印機(jī)、顯卡等設(shè)備驅(qū)動程序的對象。事實上,這一類對象只能有一個實例,如果制造出多個實例就可能會導(dǎo)致一些問題的產(chǎn)生,比如:程序的行為異常、資源使用過量、或者不一致性的結(jié)果。
使用單例模式的好處:
- 對于頻繁使用的對象,可以省略創(chuàng)建對象所花費的時間,這對于那些重量級對象而言,是非常可觀的一筆系統(tǒng)開銷;
- 由于 new 操作的次數(shù)減少,因而對系統(tǒng)內(nèi)存的使用頻率也會降低,這將減輕 GC 壓力,縮短 GC 停頓時間。
Spring 中 bean 的默認(rèn)作用域就是 singleton(單例)的。 除了 singleton 作用域,Spring 中 bean 還有下面幾種作用域:
- prototype : 每次請求都會創(chuàng)建一個新的 bean 實例。
- request : 每一次HTTP請求都會產(chǎn)生一個新的bean,該bean僅在當(dāng)前HTTP request內(nèi)有效。
- session : 每一次HTTP請求都會產(chǎn)生一個新的 bean,該bean僅在當(dāng)前 HTTP session 內(nèi)有效。
- global-session: 全局session作用域,僅僅在基于portlet的web應(yīng)用中才有意義,Spring5已經(jīng)沒有了。Portlet是能夠生成語義代碼(例如:HTML)片段的小型Java Web插件。它們基于portlet容器,可以像servlet一樣處理HTTP請求。但是,與 servlet 不同,每個 portlet 都有不同的會話
4.適配器模式 - SpringMVC中的HandlerAdatper
5.裝飾器模式 - BeanWrapper
6.代理模式 - AOP底層
代理模式在 AOP 中的應(yīng)用
AOP(Aspect-Oriented Programming:面向切面編程)能夠?qū)⒛切┡c業(yè)務(wù)無關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任(例如事務(wù)處理、日志管理、權(quán)限控制等)封裝起來,便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于未來的可拓展性和可維護(hù)性。
Spring AOP 就是基于動態(tài)代理的,如果要代理的對象,實現(xiàn)了某個接口,那么Spring AOP會使用JDK Proxy,去創(chuàng)建代理對象,而對于沒有實現(xiàn)接口的對象,就無法使用 JDK Proxy 去進(jìn)行代理了,這時候Spring AOP會使用Cglib ,這時候Spring AOP會使用 Cglib 生成一個被代理對象的子類來作為代理
7.觀察者模式 - spring的事件監(jiān)聽
觀察者模式是一種對象行為型模式。它表示的是一種對象與對象之間具有依賴關(guān)系,當(dāng)一個對象發(fā)生改變的時候,這個對象所依賴的對象也會做出反應(yīng)。Spring 事件驅(qū)動模型就是觀察者模式很經(jīng)典的一個應(yīng)用。Spring 事件驅(qū)動模型非常有用,在很多場景都可以解耦我們的代碼。比如我們每次添加商品的時候都需要重新更新商品索引,這個時候就可以利用觀察者模式來解決這個問題。
8.策略模式 - excludeFilters、includeFilters
9.模版方法模式 - Spring幾乎所有的外接擴(kuò)展都采用這種模式
模板方法模式是一種行為設(shè)計模式,它定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。 模板方法使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟的實現(xiàn)方式文章來源:http://www.zghlxwxcb.cn/news/detail-818701.html
public abstract class Template {
//這是我們的模板方法
public final void TemplateMethod(){
PrimitiveOperation1();
PrimitiveOperation2();
PrimitiveOperation3();
}
protected void PrimitiveOperation1(){
//當(dāng)前類實現(xiàn)
}
//被子類實現(xiàn)的方法
protected abstract void PrimitiveOperation2();
protected abstract void PrimitiveOperation3();
}
public class TemplateImpl extends Template {
@Override
public void PrimitiveOperation2() {
//當(dāng)前類實現(xiàn)
}
@Override
public void PrimitiveOperation3() {
//當(dāng)前類實現(xiàn)
}
}
Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 結(jié)尾的對數(shù)據(jù)庫操作的類,它們就使用到了模板模式。一般情況下,我們都是使用繼承的方式來實現(xiàn)模板模式,但是 Spring 并沒有使用這種方式,而是使用Callback 模式與模板方法模式配合,既達(dá)到了代碼復(fù)用的效果,同時增加了靈活性。文章來源地址http://www.zghlxwxcb.cn/news/detail-818701.html
- 10.責(zé)任鏈模式 - Aop的方法調(diào)用
到了這里,關(guān)于65.Spring 框架中都用到了哪些設(shè)計模式?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!