<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)

    相冊

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 精品亚洲国产成人| 久久久受www免费人成| 免费一区二区视频| a在线视频免费观看| 亚洲视频在线观看地址| 曰皮全部过程视频免费国产30分钟| 一级做a爰全过程免费视频毛片| 亚洲尹人九九大色香蕉网站| 成年女人午夜毛片免费看| 久久不见久久见免费影院www日本| 亚洲成在人线电影天堂色| 免费在线观看理论片| 最近免费中文字幕高清大全| 国产成人亚洲精品播放器下载 | 91短视频在线免费观看| 久久亚洲中文字幕无码| 亚洲AV无码1区2区久久| 无码专区一va亚洲v专区在线| 一级毛片成人免费看免费不卡 | 中文字幕日本人妻久久久免费| 亚洲永久在线观看| 亚洲色成人网站WWW永久| 精品久久久久久久免费人妻| 久久精品成人免费观看| 免费一级毛片在线播放视频免费观看永久 | a色毛片免费视频| 亚洲欧美不卡高清在线| 亚洲影院在线观看| 久久久久亚洲精品男人的天堂| 啦啦啦手机完整免费高清观看| 99视频在线免费看| 久久精品免费大片国产大片 | 亚洲av永久中文无码精品| 久久精品国产亚洲av麻豆小说| 亚洲爽爽一区二区三区| 韩国欧洲一级毛片免费 | 四虎永久在线精品视频免费观看| 国产精品视频免费观看| 国产好大好硬好爽免费不卡| 一级黄色片免费观看| 国产亚洲视频在线播放大全|