隨筆-95  評論-31  文章-10  trackbacks-0
          先上圖:
          接著幾乎就明白了:一些"插件"要么讓你繼承一個抽象類要么讓你實現一個接口要么讓你注解一下,比如一個server服務器接收到客戶端發來的消息,那么可以用兩種方式增加攔截處理機制:1,觀察者 2,責任鏈
          如果采用觀察者:
          定義一個攔截器抽象類或者接口(主題),增加自定義處理(觀察者),然后一般就是addxxxListener或者就是addxxxIntercepter,消息業務處理最終只有一個業務組件類來處理,但是可以定義多個觀察者。
          對這條消息處理,也就是說,要把主題傳遞給觀察者,觀察者拿到進行一系列處理,觀察者用隊列,棧或者其它什么數據結構,最后一個是真正的業務處理,那么在此之前就可以做很多操作了,比如把消息存儲下來,或者把消息的一部分取出來等等。
          如果采用責任鏈:
          一般就是不純的責任鏈模式,這種方式比如servlet過濾器就采用的這種方式,還有struts2的攔截器,定義一系列過濾器鏈,這個鏈又可以采用不同數據結構隊列 棧 樹等等,可以把收到的消息進行一些額外處理,然后再傳遞給下一個鏈對象,最終由用戶定義的業務組件來處理。而這些鏈用戶可以自定義,就達到了這種效果。
          以上兩種方式唯一的不同點在于:
          采用觀察者模式,那么在中間傳遞的是主題,這個主題無法動態的改變,只能做額外處理,但傳遞的還是原本的主題對象。
          采用責任鏈模式,那么在中間傳遞的過程中,可以對主題對象做一些改變,在傳遞給下一個鏈對象。
          責任鏈模式不適應于大規模的系統設計,一般如果采用觀察者模式,就要對這種方式進行一些增強,比如一個觀察者處理完畢后,包裝這個主題可用裝飾者模式增強然后返回,讓下一個觀察者使用這個主題,對多個觀察者還可以使用組合模式,可以把多個觀察者改為樹結構,采用責任鏈模式也可以采用這種方法。
          代理模式也能實現這種攔截,也就是aop方式
          隨后寫幾個例子,openfire插件以及針對于spring mvc的一些玩法
          posted on 2013-09-26 16:34 朔望魔刃 閱讀(263) 評論(0)  編輯  收藏 所屬分類: 設計模式&&數據結構
          主站蜘蛛池模板: 镇坪县| 房产| 古交市| 高雄市| 枣阳市| 邻水| 南丹县| 东源县| 林州市| 辽源市| 和顺县| 木兰县| 万全县| 金昌市| 西充县| 平潭县| 敖汉旗| 赤水市| 双江| 诏安县| 敦化市| 韶关市| 长白| 磐石市| 苍梧县| 马尔康县| 呼和浩特市| 漠河县| 松滋市| 绥江县| 岐山县| 澄城县| 宁强县| 温泉县| 乌苏市| 江孜县| 沂南县| 竹山县| 和林格尔县| 花垣县| 德兴市|