<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    J2EE之巔

     

    Double Dispatch模式

    本文介紹了常見面向對象語言(Java,C#等)OverLoad對于運行時執行的方法邦定的局限,并且如何通過Double Dispatch來實現運行時行為邦定。

    根據對象來選擇行為問題

    public interface Event {

    }

    public class BlueEvent implements Event {

    }

    public class RedEvent implements Event {

    }

    public class Handler {

    public void handle(Event event){

    System.out.println("It is event");

    }

    public void handle(RedEvent event){

    System.out.println("It is RedEvent");

    }

    public void handle(BlueEvent event){

    System.out.println("It is BlueEvent");

    }

    }

    public class Main {

    public static void main(String[] args) {

    Event evt=new BlueEvent();

    new Handler().handle(evt);

    }

    }

    你認為運行結果是什么呢?

    結果:It is event

    是不是有點出乎意料,不是It is BlueEvent,這是應為Overload并不支持在運行時根據參數的運行時類型來幫定方法,所以要執行哪個方法是在編譯時就選定了的。

    2 Double Dispatch Pattern

    由于Java,C++及C#都具有上述局限,通常我們只能通過Switch或if結構來實現,當然這種實現方式既不優雅而且影響代碼的可維護性。

    通過以下的Double Dispatch Pattern便可以優雅的實現。

    public interface Event {

    public void injectHandler(EventHandler v);

    }

    public class BlueEvent implements Event {

    public void injectHandler(EventHandler v) {

    v.handle(this);

    }

    }

    public class RedEvent implements Event {

    public void injectHandler(EventHandler v) {

    v.handle(this);

    }

    }

    public class EventHandler {

    public void handle(BlueEvent e){

    System.out.println("It is BlueEvent");

    }

    public void handle(RedEvent e){

    System.out.println("It is RedEvent");

    }

    }

    public class Main {

    public static void main(String[] args) {

    Event evt=new BlueEvent();

    evt.injectHandler(new EventHandler());

    }

    }

    其實設計模式(GoF)中的Visitor模式就是Double Dispatch的一種應用。


    蔡超
    HP 軟件架構師
    軟件架構顧問
    SCEA,SCBCD,MCSD
    IBM Certified Solution Designer for OOA&D vUML2
    Chaocai2001@yahoo.com.cn,chao.cai@hp.com

    posted on 2009-02-19 21:02 超越巔峰 閱讀(2515) 評論(2)  編輯  收藏 所屬分類: Design Pattern

    評論

    # re: Double Dispatch模式 2009-02-20 09:10 ,,らSummer

    講解得非常清楚,感謝~~  回復  更多評論   

    # re: Double Dispatch模式 2009-02-21 10:09 ZelluX

    贊,不錯  回復  更多評論   

    導航

    統計

    常用鏈接

    留言簿(12)

    隨筆分類(54)

    隨筆檔案(59)

    文章分類(2)

    文章檔案(1)

    相冊

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 中文在线免费看视频| 日韩毛片一区视频免费| 免费国产黄网站在线观看| 久久精品夜色噜噜亚洲A∨| 免费国产黄网站在线看| 四虎国产精品免费视| 麻豆亚洲AV成人无码久久精品 | 麻豆69堂免费视频| 国产人妖ts在线观看免费视频| 亚洲第一成年免费网站| 国产麻豆免费观看91| 美女视频黄a视频全免费网站色| 国产小视频在线免费| 老司机午夜免费视频| 亚洲国产成人爱av在线播放| 色婷婷综合缴情综免费观看| 亚洲人成无码网WWW| 91视频免费网站| 亚洲成色WWW久久网站| 蜜桃成人无码区免费视频网站| 久久亚洲美女精品国产精品 | 在线观看免费播放av片| 亚洲精品视频在线| 1000部拍拍拍18勿入免费凤凰福利| 亚洲av极品无码专区在线观看| 妞干网在线免费视频| 日本一区二区在线免费观看| 伊人久久综在合线亚洲91| 日韩中文字幕免费视频| 一本色道久久88亚洲精品综合| 国产男女猛烈无遮挡免费视频 | a级毛片无码免费真人久久| 91久久亚洲国产成人精品性色 | 免费一级全黄少妇性色生活片 | 久久久久亚洲AV无码专区首JN| 西西大胆无码视频免费| 特级毛片在线大全免费播放| 久久99国产亚洲精品观看| 午夜两性色视频免费网站| 91国内免费在线视频| 久久亚洲精品国产精品婷婷 |