Spring中的八大模式簡單介紹
一:Spring中的八大模式
Spring中的八大模式,有很多我們前面已經(jīng)講過了,這里只需要大概有個印象,后期會出一個專門對23種設(shè)計(jì)模式的詳解!
1. 簡單工廠模式
BeanFactory的getBean()方法,通過唯一標(biāo)識來獲取Bean對象。是典型的簡單工廠模式(靜態(tài)工廠模式);主要包括三部分:抽象產(chǎn)品角色、具體產(chǎn)品角色、工廠類角色;這個靜態(tài)方法所在的工廠類相當(dāng)于一個上帝類,或者說全能類,所有產(chǎn)品一個工廠,一旦出現(xiàn)故障,整個系統(tǒng)就會癱瘓;并且不符合OCP開閉原則。不屬于23種設(shè)計(jì)模式!
2. 工廠方法模式
FactoryBean是典型的工廠方法模式;主要包括四部分:抽象產(chǎn)品角色、具體產(chǎn)品角色、抽象工廠角色、具體工廠角色;符合OCP開閉原則,但是存在類爆炸問題!在配置文件中通過factory-method屬性來指定工廠方法,該方法是一個實(shí)例方法。
3. 單例模式
Spring用的是雙重判斷加鎖的單例模式;單列模式的實(shí)現(xiàn),包括餓漢式和懶漢式;請看下面代碼,我們之前講解Bean的循環(huán)依賴的時候見過:

4. 代理模式
代理模式包括靜態(tài)代理和動態(tài)代理,動態(tài)代理又包括JDK動態(tài)代理(只能代理接口)和CJLIB動態(tài)代理(類和接口都可以代理)。Spring的面向切面AOP就是使用了動態(tài)代理實(shí)現(xiàn)的!
5. 裝飾器模式
JavaSE中的IO流是非常典型的裝飾器模式!
Spring 中配置 DataSource 的時候,這些dataSource可能是各種不同類型的,比如不同的數(shù)據(jù)庫:Oracle、SQL Server、MySQL等,也可能是不同的數(shù)據(jù)源:比如apache 提供的org.apache.commons.dbcp.BasicDataSource、spring提供的org.springframework.jndi.JndiObjectFactoryBean等。
這時,能否在盡可能少修改原有類代碼下的情況下,做到動態(tài)切換不同的數(shù)據(jù)源?此時就可以用到裝飾者模式。
Spring根據(jù)每次請求的不同,將dataSource屬性設(shè)置成不同的數(shù)據(jù)源,以到達(dá)切換數(shù)據(jù)源的目的。
Spring中類名中帶有:Decorator和Wrapper單詞的類,都是裝飾器模式。
6. 觀察者模式
定義對象間的一對多的關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動更新。
Spring中觀察者模式一般用在listener(監(jiān)聽器)的實(shí)現(xiàn)。Servlet的ServletContextListener就是一個觀察者模式:其中ServletContextListener就是觀察者、ServletContext就是被觀察者、ServletContext對象被創(chuàng)建或ServletContext對象被銷毀等就是事件。
Spring中的事件編程模型就是觀察者模式的實(shí)現(xiàn)。在Spring中定義了一個ApplicationListener接口,用來監(jiān)聽Application的事件,Application其實(shí)就是ApplicationContext,ApplicationContext內(nèi)置了幾個事件,其中比較容易理解的是:ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent、ContextClosedEvent
7. 策略模式
策略模式是行為性模式,調(diào)用不同的方法,適應(yīng)行為的變化 ,強(qiáng)調(diào)父類的調(diào)用子類的特性 。
getHandler是HandlerMapping接口中的唯一方法,用于根據(jù)請求找到匹配的處理器。
比如:我們自己寫了AccountDao接口,然后這個接口下有不同的實(shí)現(xiàn)類:AccountDaoForMySQL,AccountDaoForOracle。對于service來說不需要關(guān)心底層具體的實(shí)現(xiàn),只需要面向AccountDao接口調(diào)用,底層可以靈活切換實(shí)現(xiàn),這就是策略模式!
8. 模板方法模式
Spring中的JdbcTemplate類就是一個模板類。它就是一個模板方法設(shè)計(jì)模式的體現(xiàn)。在模板類的模板方法execute中編寫核心算法,具體的實(shí)現(xiàn)步驟在子類中完成。
到此這篇關(guān)于Spring中的八大模式簡單介紹的文章就介紹到這了,更多相關(guān)Spring八大模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中利用Alibaba開源技術(shù)EasyExcel來操作Excel表的示例代碼
這篇文章主要介紹了Java中利用Alibaba開源技術(shù)EasyExcel來操作Excel表的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
詳解如何給Sprintboot應(yīng)用添加插件機(jī)制
這篇文章主要為大家介紹了如何給 Sprintboot 應(yīng)用添加插件機(jī)制,文中有詳細(xì)的解決方案及示例代碼,具有一定的參考價值,需要的朋友可以參考下2023-08-08
在Java中創(chuàng)建對話框的最佳實(shí)戰(zhàn)指南
對話框是用于向用戶顯示信息(如錯誤提示、輸入請求)的圖形組件,通常作為Java GUI應(yīng)用的頂級容器存在,本文給大家分享了在Java中創(chuàng)建對話框的最佳實(shí)戰(zhàn)指南,需要的朋友可以參考下2025-06-06
解決工具接口調(diào)用報(bào)錯:error:Unsupported Media Type問題
當(dāng)遇到"UnsupportedMediaType"錯誤時,意味著HTTP請求的Content-Type與服務(wù)器期望的不匹配,比如服務(wù)器期待接收J(rèn)SON格式數(shù)據(jù),而發(fā)送了純文本格式,常見的Content-Type類型包括text/html、application/json、multipart/form-data等2024-10-10
SpringBoot越權(quán)和數(shù)據(jù)權(quán)限控制的實(shí)現(xiàn)方案(最新整理)
文章介紹通過自定義注解@PermissionCheck、切面編程和用戶權(quán)限服務(wù)實(shí)現(xiàn)Java權(quán)限控制,限制只讀用戶操作,優(yōu)化數(shù)據(jù)庫查詢并統(tǒng)一異常處理,確保系統(tǒng)安全與擴(kuò)展性,本文給大家介紹SpringBoot越權(quán)和數(shù)據(jù)權(quán)限控制的實(shí)現(xiàn)方案,感興趣的朋友跟隨小編一起看看吧2025-06-06
Java構(gòu)造函數(shù)里的一些坑記錄super()和this()
這篇文章主要介紹了Java構(gòu)造函數(shù)里的一些坑記錄super()和this(),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
JavaSE基礎(chǔ)之反射機(jī)制(反射Class)詳解
反射機(jī)制有什么用?通過java語言中的反射機(jī)制可以操作字節(jié)碼文件,可以讀和修改字節(jié)碼文件。所以本文將為大家講講反射機(jī)制的使用,需要的可以參考一下2022-09-09

