激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringMVC適配器模式代碼示例

SpringMVC適配器模式代碼示例

2021-02-23 11:34Tongkey Java教程

這篇文章主要介紹了SpringMVC適配器模式代碼示例,涉及模擬springmvc的Java代碼等相關內容,具有一定借鑒價值,需要的朋友可以參考下。

此處采用了適配器模式, 由于Controller的類型不同,有多重實現方式,那么調用方式就不是確定的,如果需要直接調用Controller方法,需要在代碼中寫成如下形式:

?
1
2
3
4
5
6
7
if(mappedHandler.getHandler() instanceof MultiActionController){
  ((MultiActionController)mappedHandler.getHandler()).xxx
}else if(mappedHandler.getHandler() instanceof XXX){
  ...
}else if(...){
  ...
}

這樣假設如果我們增加一個HardController,就要在代碼中加入一行 if(mappedHandler.getHandler() instanceof HardController)
這種形式就使得程序難以維護,也違反了設計模式中的開閉原則 -- 對擴展開放,對修改關閉。

因此Spring定義了一個適配接口,使得每一種Controller有一種對應的適配器實現類,
讓適配器代替controller執行相應的方法。這樣在擴展Controller 時,只需要增加一個適配器類就完成了SpringMVC的擴展了,真的是很精巧的做法!

廢話不多說還是上代碼吧,為了看得清楚,就自己實現一套代碼來模擬springMVC, 直接貼Spring源碼容易降低關注點。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//定義一個Adapter接口
public interface HandlerAdapter {
    public Boolean supports(Object handler);
    public void handle(Object handler);
}
//以下是三種Controller實現
public interface Controller {
}
public class HttpController implements Controller{
    public void doHttpHandler(){
        System.out.println("http...");
    }
}
public class SimpleController implements Controller{
    public void doSimplerHandler(){
        System.out.println("simple...");
    }
}
public class AnnotationController implements Controller{
    public void doAnnotationHandler(){
        System.out.println("annotation...");
    }
}
//下面編寫適配器類
public class SimpleHandlerAdapter implements HandlerAdapter {
    public void handle(Object handler) {
        ((SimpleController)handler).doSimplerHandler();
    }
    public Boolean supports(Object handler) {
        return (handler instanceof SimpleController);
    }
}
public class HttpHandlerAdapter implements HandlerAdapter {
    public void handle(Object handler) {
        ((HttpController)handler).doHttpHandler();
    }
    public Boolean supports(Object handler) {
        return (handler instanceof HttpController);
    }
}
public class AnnotationHandlerAdapter implements HandlerAdapter {
    public void handle(Object handler) {
        ((AnnotationController)handler).doAnnotationHandler();
    }
    public Boolean supports(Object handler) {
        return (handler instanceof AnnotationController);
    }
}
//模擬一個DispatcherServlet
import java.util.ArrayList;
import java.util.List;
public class DispatchServlet {
    public static List<HandlerAdapter> handlerAdapters = new ArrayList<HandlerAdapter>();
    public DispatchServlet(){
        handlerAdapters.add(new AnnotationHandlerAdapter());
        handlerAdapters.add(new HttpHandlerAdapter());
        handlerAdapters.add(new SimpleHandlerAdapter());
    }
    public void doDispatch(){
        //此處模擬SpringMVC從request取handler的對象,僅僅new出,可以出,       
        //不論實現何種Controller,適配器總能經過適配以后得到想要的結果
        //   HttpController controller = new HttpController();
        //   AnnotationController controller = new AnnotationController();
        SimpleController controller = new SimpleController();
        //得到對應適配器
        HandlerAdapter adapter = getHandler(controller);
        //通過適配器執行對應的controller對應方法
        adapter.handle(controller);
    }
    public HandlerAdapter getHandler(Controller controller){
        for (HandlerAdapter adapter: this.handlerAdapters){
            if(adapter.supports(controller)){
                return adapter;
            }
        }
        return null;
    }
    public static void main(String[] args){
        new DispatchServlet().doDispatch();
    }
}

通過這個模式可以看出開源代碼中的精妙,我們在看框架源碼時需要有目標的看,這樣會找到很多自己需要學習的東西,目前很多分析源碼的帖子大部分是講解what,how,

以此來拋磚引玉,希望各位能夠一起來討論“why”

總結

以上就是本文關于SpringMVC適配器模式代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://www.cnblogs.com/tongkey/p/7919401.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人一级在线 | www.99久久久 | 日本成年免费网站 | 狠狠干五月 | 99国产精品国产免费观看 | 91成人久久| 国产精品成人久久久久a级 av电影在线免费 | 一级免费看片 | 日本一级毛片在线播放 | 亚洲第一视频 | 99pron| 中午日产幕无线码1区 | 黄污网站在线 | 天天草天天干天天射 | 99久久一区二区 | 一级片在线免费观看 | 国产精品免费观看视频 | 黄色影院一级片 | 羞羞视频免费网站日本动漫 | 爱逼av | hdjapanesemassagehd日本 | 亚洲成人入口 | 黄污在线观看 | 日本不卡一区二区三区在线 | 欧美一级高清免费 | www.99tv| 国产精品自拍av | 国产高潮好爽受不了了夜色 | 91高清国产 | 欧美91看片特黄aaaa | 大片毛片| 看个毛片| 欧美成人精品一区二区 | 国产一级二级视频 | 草草影院地址 | 91精品国产综合久久婷婷香蕉 | 色悠悠久久久久 | 激情小说色 | 国产一区二区视频在线播放 | 羞羞电影在线观看 | 一二区电影 |