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