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

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

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

    J2EE之巔

     

    Double Dispatch模式

    本文介紹了常見(jiàn)面向?qū)ο笳Z(yǔ)言(Java,C#等)OverLoad對(duì)于運(yùn)行時(shí)執(zhí)行的方法邦定的局限,并且如何通過(guò)Double Dispatch來(lái)實(shí)現(xiàn)運(yùn)行時(shí)行為邦定。

    根據(jù)對(duì)象來(lái)選擇行為問(wèn)題

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

    }

    }

    你認(rèn)為運(yùn)行結(jié)果是什么呢?

    結(jié)果:It is event

    是不是有點(diǎn)出乎意料,不是It is BlueEvent,這是應(yīng)為Overload并不支持在運(yùn)行時(shí)根據(jù)參數(shù)的運(yùn)行時(shí)類型來(lái)幫定方法,所以要執(zhí)行哪個(gè)方法是在編譯時(shí)就選定了的。

    2 Double Dispatch Pattern

    由于Java,C++及C#都具有上述局限,通常我們只能通過(guò)Switch或if結(jié)構(gòu)來(lái)實(shí)現(xiàn),當(dāng)然這種實(shí)現(xiàn)方式既不優(yōu)雅而且影響代碼的可維護(hù)性。

    通過(guò)以下的Double Dispatch Pattern便可以優(yōu)雅的實(shí)現(xiàn)。

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

    }

    }

    其實(shí)設(shè)計(jì)模式(GoF)中的Visitor模式就是Double Dispatch的一種應(yīng)用。


    蔡超
    HP 軟件架構(gòu)師
    軟件架構(gòu)顧問(wèn)
    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 超越巔峰 閱讀(2527) 評(píng)論(2)  編輯  收藏 所屬分類: Design Pattern

    評(píng)論

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

    講解得非常清楚,感謝~~  回復(fù)  更多評(píng)論   

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

    贊,不錯(cuò)  回復(fù)  更多評(píng)論   

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(12)

    隨筆分類(54)

    隨筆檔案(59)

    文章分類(2)

    文章檔案(1)

    相冊(cè)

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 四虎影院永久免费观看| 一个人看www在线高清免费看| 三级网站在线免费观看| 国产一区二区三区免费观看在线| 久久免费动漫品精老司机| 国产免费不卡视频| 免费爱爱的视频太爽了| 亚洲欧洲精品成人久久奇米网| 久久精品国产精品亚洲艾草网美妙| 亚洲成av人片天堂网| 亚洲人6666成人观看| 色欲aⅴ亚洲情无码AV| 国产三级在线免费观看| 午夜免费福利视频| 最新免费jlzzjlzz在线播放| 亚洲第一区精品观看| 亚洲国产精品线在线观看| 亚洲中文无码永久免| 一级一片免费视频播放| 99精品视频在线免费观看| 免费无码又爽又高潮视频| 亚洲综合在线另类色区奇米| 亚洲卡一卡2卡三卡4麻豆| 国产精品亚洲专区在线播放| 国内少妇偷人精品视频免费| 最近2019中文免费字幕| 亚洲国产另类久久久精品黑人| 亚洲天堂2016| 91视频免费观看| 啦啦啦www免费视频| 亚洲av午夜成人片精品网站| 亚洲综合成人婷婷五月网址| 中文字幕乱码系列免费| 毛片a级毛片免费观看免下载| 青青草原亚洲视频| 亚洲中文字幕AV每天更新| 久久精品成人免费观看| 国产免费变态视频网址网站 | 国产网站免费观看| 亚洲av之男人的天堂网站| 亚洲av午夜国产精品无码中文字 |