介面卡模式包含如下角色:
我們都知道springmvc就用到了介面卡模式,那他是怎麼適配呢,我們來看看它的原始碼,首先我們要清楚springmvc的執行原理,它的整個流程我這裡就不像述了,說一下關鍵的部分:
dispatcherservlte
會根據配置檔案資訊註冊handleradapter
,如果在配置檔案中沒有配置,那麼dispatcherservlte
會獲取handleradapter
的預設配置,如果是讀取預設配置的話,dispatcherservlte
會讀取dispatcherservlte.properties
檔案,該檔案中配置了三種handleradapter
:httprequesthandleradapter
,******controllerhandleradapter
和annotationmethodhandleradapter
。dispatcherservlte
會將這三個handleradapter
物件儲存到它的handleradapters
這個集合屬性中,這樣就完成了handleradapter
的註冊。
dispatcherservlte
部分原始碼
public class dispatcherservlet extends frameworkservlet
} catch (exception var20) catch (throwable var21)
......
} catch (exception var22) catch (throwable var23)
} finally }}
至於handler()
如何知道該去執行controller中哪個方法,當然是通過註解去轉換對應方法的。因此,這裡的介面卡模式還不是特別的純粹,還結合了反射機制。dispatcherservlte
屬於客戶端,我們的controller
屬於被適配的類,handleradapter
屬於介面卡。
現在我們假定需要寫乙個執行緒池任務排程框架,我們知道jdk自帶的執行緒框架可以建立乙個執行緒池,但是執行緒池只能傳入實現runnable
介面或者callable
介面的物件。
executorservice cachedthreadpool = executors.newcachedthreadpool();
cachedthreadpool.execute(new runnable()
})
那我們要咋樣可以讓客戶端使用的時候無須繼承runnable
來使用我們的這個框架呢。你可以像springmvc一樣使用介面卡加註解。也可以提供乙個實現runnable
介面的抽象介面卡類,讓客戶端進行一定的配置來將普通的類適配到runnable
。
關於介面卡的使用方面還有很多,比如spring security
的websecurityconfigureradapter
和netty
中的channelinboundhandleradapter
對於介面卡模式類名一般都以adapter
結尾
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...
設計模式 介面卡模式(類介面卡和物件介面卡)
如果去歐洲國家去旅遊的話,他們的插座如下圖最左邊,是歐洲標準。而我們使用的插頭如下圖最右邊的。因此我們的膝上型電腦,手機在當地不能直接充電。所以就需要乙個插座轉換器,轉換器第1面插入當地的插座,第2麵供我們充電,這樣使得我們的插頭在當地能使用。生活中這樣的例子很多,手機充電器 將220v轉換為5v的...
設計模式 介面卡
一 功能 將乙個類的介面轉換成客戶希望的另外乙個介面,解決兩個已有介面之間不匹配的問題。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。二 示例 1 class adapter namespace designpattern adapter class target cl...