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

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

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

    J2EE之巔

     

    Double Dispatch模式

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

    根據(jù)對象來選擇行為問題

    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

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

    2 Double Dispatch Pattern

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

    通過以下的Double Dispatch Pattern便可以優(yōu)雅的實現(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è)計模式(GoF)中的Visitor模式就是Double Dispatch的一種應(yīng)用。


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

    評論

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

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

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

    贊,不錯  回復(fù)  更多評論   

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(12)

    隨筆分類(54)

    隨筆檔案(59)

    文章分類(2)

    文章檔案(1)

    相冊

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 男男gay做爽爽免费视频| 国产精品免费大片| 亚洲av无码av制服另类专区| **实干一级毛片aa免费| 亚洲欧美乱色情图片| 亚洲色成人网站WWW永久| 人与禽交免费网站视频| 添bbb免费观看高清视频| 情人伊人久久综合亚洲| 免费特级黄毛片在线成人观看 | 亚洲欧洲国产综合AV无码久久| 亚洲国产成人精品久久久国产成人一区二区三区综| 一级毛片一级毛片免费毛片| 亚洲国产美国国产综合一区二区 | 色吊丝最新永久免费观看网站| 久久免费99精品国产自在现线 | 亚洲国产天堂久久综合网站 | 亚洲国产精品成人精品软件| 国产美女无遮挡免费视频网站| 一级毛片免费视频| 黄色毛片免费在线观看| 亚洲乱码一二三四五六区| 伊人久久综在合线亚洲91| 免费黄网在线观看| 在线观看的免费网站无遮挡| 日韩免费码中文在线观看| 亚洲性线免费观看视频成熟| 亚洲精品国产字幕久久不卡| 国产一级一片免费播放| 91在线视频免费看| 无码少妇精品一区二区免费动态 | 美女内射无套日韩免费播放| 日韩免费高清一级毛片| 亚洲日本VA中文字幕久久道具| 久久亚洲AV成人无码国产| 亚洲中文字幕久久精品无码APP| 成人国产mv免费视频| 中文字幕人成无码免费视频| 99精品在线免费观看| 在线观看黄片免费入口不卡| 永久免费无码日韩视频|