我們在面試的過程中,很多時候,面試官喜歡問關(guān)于設(shè)計模式的相關(guān)內(nèi)容,甚至有些在筆試的時候,讓你簡單寫一個設(shè)計模式的實(shí)現(xiàn),這時候,也有面試官習(xí)慣的問面試者,你了解Spring中使用到的設(shè)計模式么?fWO28資訊網(wǎng)——每日最新資訊28at.com
設(shè)計模式
在Java中,設(shè)計模式是解決常見設(shè)計問題的最佳實(shí)踐和經(jīng)驗(yàn)總結(jié)。它們幫助開發(fā)者設(shè)計更靈活、可維護(hù)且可擴(kuò)展的軟件系統(tǒng)。以下是Java中常見的一些設(shè)計模式分類及其示例:fWO28資訊網(wǎng)——每日最新資訊28at.com
創(chuàng)建型模式(Creational Patterns)
- 單例模式(Singleton):確保一個類只有一個實(shí)例,并提供一個全局訪問點(diǎn)。
- 工廠方法模式(Factory Method):定義一個用于創(chuàng)建對象的接口,讓子類決定實(shí)例化哪一個類。
- 抽象工廠模式(Abstract Factory):提供一個接口,用于創(chuàng)建相關(guān)或依賴對象的家族,而不需要明確指定具體類。
- 建造者模式(Builder):將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
- 原型模式(Prototype):用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。
結(jié)構(gòu)型模式(Structural Patterns)
- 適配器模式(Adapter):將一個類的接口轉(zhuǎn)換成客戶希望的另一個接口,使得原本由于接口不兼容而無法一起工作的類可以一起工作。
- 組合模式(Composite):將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),組合模式使得用戶對單個對象和組合對象的使用具有一致性。
- 裝飾器模式(Decorator):動態(tài)地給一個對象添加一些額外的職責(zé),就增加功能來說,裝飾器模式相比生成子類更為靈活。
- 橋接模式(Bridge):將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。
- 外觀模式(Facade):為子系統(tǒng)中的一組接口提供一個一致的界面,定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。
- 享元模式(Flyweight):運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對象。
- 代理模式(Proxy):為其他對象提供一個代理以控制對這個對象的訪問。
行為型模式(Behavioral Patterns)
- 迭代器模式(Iterator):提供一種方法順序訪問一個聚合對象中各個元素,而又不需暴露該對象的內(nèi)部表示。
- 觀察者模式(Observer):定義對象之間的一種一對多的依賴關(guān)系,當(dāng)一個對象改變狀態(tài)時,它的所有依賴者都會收到通知并自動更新。
- 模板方法模式(Template Method):定義一個操作中的算法的框架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結(jié)構(gòu)即可重新定義該算法的某些特定步驟。
- 命令模式(Command):將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進(jìn)行參數(shù)化;對請求排隊(duì)或記錄請求日志,以及支持可撤銷的操作。
- 狀態(tài)模式(State):允許一個對象在其內(nèi)部狀態(tài)改變時改變它的行為。對象看起來似乎修改了它的類。
- 策略模式(Strategy):定義了一系列的算法,并將每一個算法封裝起來,使它們可以互相替換。策略模式使得算法可以獨(dú)立于使用它的客戶而變化。
- 職責(zé)鏈模式(Chain of Responsibility):避免請求發(fā)送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,并且沿著這條鏈傳遞請求,直到有對象處理它為止。解釋器模式(Interpreter):給定一個語言,定義它的文法的一種表示,并定義一個解釋器,該解釋器使用該表示來解釋語言中的句子。
- 中介者模式(Mediator):用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。
- 訪問者模式(Visitor):表示一個作用于某對象結(jié)構(gòu)中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。備忘錄模式(Memento):在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可將該對象恢復(fù)到原先保存的狀態(tài)。
- 空對象模式(Null Object):使用空對象而不是null引用。
- 規(guī)格模式(Specification):定義了一系列算法的約束條件。
這么一總結(jié),看起來設(shè)計模式那是真的特別的多。那么在Spring 中都使用到了哪些設(shè)計模式呢?fWO28資訊網(wǎng)——每日最新資訊28at.com
Spring 中用到了哪些設(shè)計模式
在Spring框架中,用到了多種設(shè)計模式,這些設(shè)計模式為框架提供了強(qiáng)大的功能和靈活性。下面我們來盤點(diǎn)一下:fWO28資訊網(wǎng)——每日最新資訊28at.com
1.簡單工廠模式(Simple Factory Pattern):fWO28資訊網(wǎng)——每日最新資訊28at.com
應(yīng)用在BeanFactory上,Spring的BeanFactory充當(dāng)工廠,負(fù)責(zé)根據(jù)配置信息創(chuàng)建Bean實(shí)例。fWO28資訊網(wǎng)——每日最新資訊28at.com
這是一種工廠模式的應(yīng)用,根據(jù)指定的類名或ID創(chuàng)建Bean對象。fWO28資訊網(wǎng)——每日最新資訊28at.com
2.工廠方法模式(Factory Method Pattern):fWO28資訊網(wǎng)——每日最新資訊28at.com
應(yīng)用在FactoryBean接口上,允許用戶自定義Bean的創(chuàng)建邏輯。fWO28資訊網(wǎng)——每日最新資訊28at.com
開發(fā)人員可以使用FactoryBean來創(chuàng)建復(fù)雜的Bean實(shí)例。fWO28資訊網(wǎng)——每日最新資訊28at.com
3.單例模式(Singleton Pattern):fWO28資訊網(wǎng)——每日最新資訊28at.com
Spring默認(rèn)將Bean配置為單例,確保在容器中只有一個共享的實(shí)例。fWO28資訊網(wǎng)——每日最新資訊28at.com
4.適配器模式(Adapter Pattern):fWO28資訊網(wǎng)——每日最新資訊28at.com
在Spring MVC中的HandlerAdapter應(yīng)用,允許不同類型的處理器適配到處理器接口,實(shí)現(xiàn)統(tǒng)一的處理器調(diào)用。fWO28資訊網(wǎng)——每日最新資訊28at.com
類似地,ViewResolver、MessageConverter等也是適配器模式的應(yīng)用。fWO28資訊網(wǎng)——每日最新資訊28at.com
5.代理模式(Proxy Pattern):fWO28資訊網(wǎng)——每日最新資訊28at.com
在Spring的AOP(面向切面編程)底層通過代理模式來實(shí)現(xiàn)切面功能,包括JDK動態(tài)代理和CGLIB代理。fWO28資訊網(wǎng)——每日最新資訊28at.com
6.觀察者模式(Observer Pattern):fWO28資訊網(wǎng)——每日最新資訊28at.com
應(yīng)用在Spring的事件監(jiān)聽機(jī)制上,允許組件監(jiān)聽和響應(yīng)特定類型的事件,實(shí)現(xiàn)松耦合的組件通信。fWO28資訊網(wǎng)——每日最新資訊28at.com
7.策略模式(Strategy Pattern):fWO28資訊網(wǎng)——每日最新資訊28at.com
在Spring的包掃描時使用,如@ComponentScan注解中的excludeFilters和includeFilters,用于定義掃描時的過濾策略。fWO28資訊網(wǎng)——每日最新資訊28at.com
如果我們在面試的時候被問到這個問題的時候,我們就得學(xué)會如何回答,而且一次性也不用說出太多,但是總有一個得分析明白,比如其中簡單的代理模式以及工廠模式,結(jié)合實(shí)際的類來進(jìn)行分析,這樣這個問題就算是回答的可以了。fWO28資訊網(wǎng)——每日最新資訊28at.com
關(guān)于 Spring 中的設(shè)計模式,你了解了多少呢?fWO28資訊網(wǎng)——每日最新資訊28at.com
本文鏈接:http://www.tebozhan.com/showinfo-26-91831-0.htmlSpring中都應(yīng)用了哪些設(shè)計模式呢?
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 八種現(xiàn)代 JavaScript 響應(yīng)式模式
下一篇: 消息稱字節(jié)跳動尋求為懂車帝融資約 8 億美元,為 IPO 做準(zhǔn)備