真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么理解web設(shè)計模式中的適配器模式

本篇內(nèi)容介紹了“怎么理解web設(shè)計模式中的適配器模式”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)專注于臨海企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),成都商城網(wǎng)站開發(fā)。臨海網(wǎng)站建設(shè)公司,為臨海等地區(qū)提供建站服務(wù)。全流程定制開發(fā),專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

適配器模式(Adapter Pattern) :將一個接口轉(zhuǎn)換成客戶希望的另一個接口,適配器模式使接口不兼容的那些類可以一起工作,其別名為包裝器(Wrapper)。適配器模式既可以作為類結(jié)構(gòu)型模式,也可以作為對象結(jié)構(gòu)型模式。

模式結(jié)構(gòu)

適配器模式包含如下角色:

  • Target:目標(biāo)抽象類

  • Adapter:適配器類

  • Adaptee:適配者類

  • Client:客戶類

源碼導(dǎo)讀

我們都知道springMVC就用到了適配器模式,那他是怎么適配呢,我們來看看它的源碼,首先我們要清楚springMVC的執(zhí)行原理,它的整個流程我這里就不像述了,說一下關(guān)鍵的部分:

  1. DispatcherServlte會根據(jù)配置文件信息注冊HandlerAdapter,如果在配置文件中沒有配置,那么DispatcherServlte會獲取HandlerAdapter的默認(rèn)配置,如果是讀取默認(rèn)配置的話,DispatcherServlte會讀取DispatcherServlte.properties文件,該文件中配置了三種HandlerAdapterHttpRequestHandlerAdapter,SimpleControllerHandlerAdapterAnnotationMethodHandlerAdapterDispatcherServlte會將這三個HandlerAdapter對象存儲到它的handlerAdapters這個集合屬性中,這樣就完成了HandlerAdapter的注冊。

  2. DispatcherServlte會根據(jù)handlerMapping傳過來的controller與已經(jīng)注冊好了的HandlerAdapter一一匹配,看哪一種HandlerAdapter是支持該controller類型的,如果找到了其中一種HandlerAdapter是支持傳過來的controller類型,那么該HandlerAdapter會調(diào)用自己的handle方法,handle方法運(yùn)用java的反射機(jī)制執(zhí)行controller的具體方法來獲得ModelAndView

DispatcherServlte部分源碼

public class DispatcherServlet extends FrameworkServlet {
    ......
    ......
    @Nullable
    private List handlerMappings;
    @Nullable
    private List handlerAdapters;
 	protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
        HttpServletRequest processedRequest = request;
        HandlerExecutionChain mappedHandler = null;
        boolean multipartRequestParsed = false;
        WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);

        try {
            try {
                ModelAndView mv = null;
                Object dispatchException = null;

                try {
                    ......
                    ......

                    HandlerAdapter ha = this.getHandlerAdapter(mappedHandler.getHandler());
                    ......
                    ......

                    mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
                    if (asyncManager.isConcurrentHandlingStarted()) {
                        return;
                    }

                    this.applyDefaultViewName(processedRequest, mv);
                    mappedHandler.applyPostHandle(processedRequest, response, mv);
                } catch (Exception var20) {
                    dispatchException = var20;
                } catch (Throwable var21) {
				......
                }
			......
            } catch (Exception var22) {
               ......
            } catch (Throwable var23) {
 			  ......
            }

        } finally {
            ......
            ......
        }
    }
}

這里只放上比較關(guān)鍵的代碼,我們可以看到當(dāng)一個請求進(jìn)入doDispatch()方法的時候,它先去getHandlerAdapter()中拿到適配器,這就是第二步中根據(jù)handlerMapping中的controller找到對應(yīng)適配器。找到適配器后通過ha.handle(processedRequest, response, mappedHandler.getHandler())執(zhí)行我們自己的controller,mappedHandler.getHandler()就是我們自己的controller

至于handler()如何知道該去執(zhí)行controller中哪個方法,當(dāng)然是通過注解去轉(zhuǎn)換對應(yīng)方法的。因此,這里的適配器模式還不是特別的純粹,還結(jié)合了反射機(jī)制。DispatcherServlte屬于客戶端,我們的Controller屬于被適配的類,HandlerAdapter屬于適配器。

現(xiàn)在我們假定需要寫一個線程池任務(wù)調(diào)度框架,我們知道JDK自帶的線程框架可以創(chuàng)建一個線程池,但是線程池只能傳入實(shí)現(xiàn)runnable接口或者callable接口的對象。

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
cachedThreadPool.execute(new Runnable() {
    @Override
     public void run() {
     }
})

那我們要咋樣可以讓客戶端使用的時候無須繼承runnable來使用我們的這個框架呢。你可以像springMVC一樣使用適配器加注解。也可以提供一個實(shí)現(xiàn)Runnable接口的抽象適配器類,讓客戶端進(jìn)行一定的配置來將普通的類適配到Runnable。

關(guān)于適配器的使用方面還有很多,比如spring securityWebSecurityConfigurerAdapternetty中的ChannelInboundHandlerAdapter 對于適配器模式類名一般都以Adapter結(jié)尾

“怎么理解web設(shè)計模式中的適配器模式”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


新聞名稱:怎么理解web設(shè)計模式中的適配器模式
瀏覽地址:http://weahome.cn/article/pgjopg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部