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

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

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

    夏天到了

    雨季過后,是蘑菇生長的季節

     

    delegation(委托)

    Delegation 定義:
    Delegation is a way of making composition as powerful for reuse as inheritance [Lie86, JZ91]. In delegation, two objects are involved in handling a request: a receiving object delegates operations to its delegate. This is analogous to subclasses deferring requests to parent classes. But with inheritance, an inherited operation can always refer to the receiving object through the this member variable in C++ and self in Smalltalk. To achieve the same effect with delegation, the receiver passes itself to the delegate to let the delegated operation refer to the receiver

    我的理解:
    ??? A 把外界傳來的訊息" 轉送" B ﹐由B 處理之﹐我們稱A 委托B 。當一些事物互相溝通分工合作時常用妥托觀念。

    值得注意的是:
    delegate -----> delegatee
    ? ? ?^? ? ? ? ? ? ? ? ? |
    ? ? ?|? ?indirection? ? |
    ? ? ?--------------------
    delegate將自己(對象)傳給delegatee,使delegatee可以通過該對象執行那些委托的操作。

    舉個例子:
    ??? 在某個框架的組成部分中,對窗口設計,可以支持任意形狀的窗口。
    ??? 開始的時候考慮是不是使用子類來實現,乍一看似乎是比較好的,但是考慮到對窗口來說形狀只能是它的一項屬性:窗口不是一“種”形狀——窗口“有”形狀。(引自《The Pragmatic Programmer》)所以采用委托的方式。
    ??? 這時,我們定義一個被委托(delegatee)類Shape和一個委托(delegate)類window。
    public abstract class Shape{?????????????????
    ??? //....???????????????????????????????????
    ??? public abstract boolean overlaps(Shape s);
    ??? public abstract int getArea();???????????
    }????????????????????????????????????????????

    public class window{?????????????????????????
    ??? private Shape shape;?????????????????????
    ??? public window(Shape shape){??????????????
    ??????? this.shape = shape;??????????????????
    ??????? ...??????????????????????????????????
    ??? }?????????????????????????????????????????
    ??? public void setShape(Shape shape){???????
    ??????? this.shape = shape;??????????????????
    ??????? ...??????????????????????????????????
    ??? }????????????????????????????????????????
    ??? public boolean overlaps(window w){???????
    ??????? return shape.overlaps(w);??????????? ?
    ??? }????????????????????????????????????????
    ??? public int getArea(){????????????????????
    ??????? return shape.getArea();??????????????
    ??? }????????????????????????????????????????
    }????????????????????????????????????????????
    class引自《The Pragmatic Programmer》)

    posted on 2006-04-06 16:25 蘑菇 閱讀(959) 評論(3)  編輯  收藏 所屬分類: 開發隨感

    評論

    # re: delegation(委托) 2006-04-06 17:34 蘑菇

    加個更容易懂的例子:
    delegateA {
    delegateeB b;

    void methodA() { b.methodB(this); }
    void do() {}
    }

    delegateeB {
    void methodB(delegateA a) { a.do(); }
    }   回復  更多評論   

    # re: delegation(委托) 2006-04-27 15:20 ruidong

    能否解釋一下上述代碼?謝謝蘑菇  回復  更多評論   

    # re: delegation(委托) 2006-04-27 19:14 蘑菇

    A是委托類,B是被委托類。
    A調用B進行委托,委托時A的對象傳遞給了B.
    在B中,使用了A的方法,完成了委托。  回復  更多評論   

    導航

    統計

    公告

    其實生活很簡單

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产精品一区二区成人片国内 | 97av免费视频| 久久综合九九亚洲一区| 久久久受www免费人成| 亚洲午夜未满十八勿入网站2| 一级做a爰性色毛片免费| 亚洲成a人片在线观看日本麻豆| 国产亚洲精品免费| 亚洲精品视频在线观看你懂的| 羞羞视频免费网站日本| 中文字幕在亚洲第一在线| 在线观看免费视频网站色| 亚洲αv久久久噜噜噜噜噜| 四虎影视成人永久免费观看视频 | 色窝窝亚洲AV网在线观看| 亚洲XX00视频| 爱丫爱丫影院在线观看免费| 亚洲成A人片在线观看无码不卡| 久久国产免费一区二区三区| 亚洲国产精品成人综合色在线婷婷| 思思re热免费精品视频66 | 精品一区二区三区高清免费观看| 国产亚洲美女精品久久久久狼| 久久不见久久见免费视频7| 亚洲不卡在线观看| 国产免费人成视频在线观看| 一个人免费观看www视频| 亚洲2022国产成人精品无码区 | 激情亚洲一区国产精品| 国产午夜无码视频免费网站| 中文字幕乱码免费看电影| 亚洲国产美女在线观看| 免费一级国产生活片| 免费黄网站在线观看| 日韩亚洲产在线观看| 中文字幕亚洲专区| 一本岛高清v不卡免费一三区| 日本在线观看免费高清| 伊人久久综在合线亚洲2019| 国产成人免费手机在线观看视频| 久久久久久久岛国免费播放|