<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 超越巔峰 閱讀(2526) 評論(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)

    相冊

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人亚洲国产精品久久| 99亚洲精品高清一二区| 久久久久亚洲精品无码网址色欲 | 色欲色香天天天综合网站免费| 久久久久亚洲精品无码网址| 特级毛片爽www免费版| 亚洲性在线看高清h片| AAAAA级少妇高潮大片免费看| 亚洲黄片毛片在线观看| 一级毛片在线完整免费观看| 男人的天堂亚洲一区二区三区 | 亚洲阿v天堂在线| a毛片全部播放免费视频完整18| 在线亚洲97se亚洲综合在线| 拍拍拍无挡免费视频网站| 亚洲一区二区中文| 在线看免费观看AV深夜影院| 亚洲伊人久久大香线蕉AV| 国产一区二区三区免费在线观看 | 亚洲色精品vr一区二区三区 | 成熟女人特级毛片www免费| 亚洲AV无码之国产精品| 亚洲国产成人a精品不卡在线| 精品国产污污免费网站入口| 亚洲AV综合色区无码一区| 国产成人精品免费视频网页大全| 亚洲一卡2卡3卡4卡乱码 在线| 美女被免费视频网站a国产| 一个人免费观看日本www视频 | 精品亚洲国产成人av| 国产黄色一级毛片亚洲黄片大全| 久久性生大片免费观看性| 久久久无码精品亚洲日韩按摩| 最近中文字幕mv手机免费高清| 国产精品亚洲精品爽爽| 亚洲日韩精品一区二区三区| 国产四虎免费精品视频| 日韩毛片免费一二三| 久久精品亚洲综合| 免费看大黄高清网站视频在线| 91视频精品全国免费观看|