SpringMVC中的適配器模式應用


轉(http://blog.sina.com.cn/s/blog_e660c25b01030kbj.html

springmvc的基本流程在之前的文章里都大致分析完了,接下來總結下springmvc中運用了哪些設計模式。

 
一、設計模式
什么是設計模式,通俗來講,就是是一套被反復使用、多數人知曉的、經過分類的、代碼設計經驗的總結。
它是軟件設計、系統設計中的一種解決方案。
有點類似圍棋中的起手定式。圍棋中一般開局中邊角的下法都是固定的,對手下出一步棋,接下來本方的落子實際上已經固定了,只有這樣下,才能獲取到最大的利益。
設計模式也是這樣,對於軟件開發中遇到的問題,采用某一種設計模式,成為了被多數人驗證的必選解決方案。
 
二、設計模式的原則
1.單一職責原則
一個類只完成單一的功能,粒度越小越好
2.開閉原則
對擴展開放,對修改關閉。
一個類開發完成后,應當可以通過擴展的方式實現新的功能,而不是通過修改原有類來達到目的。
3.里氏替換原則
所有引用父類的地方都可以透明的使用其子類
4.依賴倒置原則
抽象不應該依賴於細節,細節應該依賴於抽象。
應該針對接口或抽象類編程,而不是針對具體的實現編程
5.接口隔離原則
接口的划分應該更細致,使用多個功能單一的接口,而不是將所有的功能放到一個接口中實現,客戶端不應該去依賴它所不需要的接口方法。
6.迪米特法則
一個類應盡可能少的與其他類進行交互。降低耦合。
 
三、適配器模式
1.springmvc中對handler的處理使用了適配器模式。
springmvc通過HandlerMapping獲取到可以處理的handler,這些handler的類型各不相同,對請求的預處理,參數獲取都不相同,最簡單的做法是根據不同的handler類型,做一個分支處理,不同的handler編寫不同的代碼。
這樣的問題是很明顯的,分支判斷復雜,代碼龐大,不符合單一職責原則。如果要增加一種handler類型,需要修改代碼增加分支處理,違反了開閉原則。DispatcherServelt與多個handler發生了交互,違反迪米特法則。
 
而使用適配器模式,就可以很好的解決這個問題:
不直接對handler進行處理,而是將handler交給適配器HandlerAdapter去處理,這樣DispatcherServlet交互的類就只剩下一個接口,HandlerAdapter,符合迪米特法則,盡可能少的與其他類發生交互;
將handler交給HandlerAdapter處理后,不同類型的handler被對應類型的HandlerAdapter處理,每個HandlerAdapter都只完成單一的handler處理,符合單一職責原則;
如果需要新增一個類型的handler,只需要新增對應類型的HandlerAdapter就可以處理,無需修改原有代碼,符合開閉原則。
這樣,不同的handler的不同處理方式,就在HandlerAdapter中得到了適配,對於DispatcherServlet來將,只需要統一的調用HandlerAdapter的handle()方法就可以了,無需關注不同handler的處理細節。
 
2.適配器模式的基本實現:
springmvc中的設計模式---適配器模式
springmvc中的設計模式---適配器模式

springmvc中的設計模式---適配器模式

springmvc中的設計模式---適配器模式
springmvc中的設計模式---適配器模式
對於springmvc來說,這里的ball就是一個個處理具體請求的handler,有些handler只需要簡單的轉發請求,有些handler則需要通過;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM