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

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

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

    夏天到了

    雨季過(guò)后,是蘑菇生長(zhǎng)的季節(jié)

     

    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 把外界傳來(lái)的訊息" 轉(zhuǎn)送" B ﹐由B 處理之﹐我們稱A 委托B 。當(dāng)一些事物互相溝通分工合作時(shí)常用妥托觀念。

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

    舉個(gè)例子:
    ??? 在某個(gè)框架的組成部分中,對(duì)窗口設(shè)計(jì),可以支持任意形狀的窗口。
    ??? 開(kāi)始的時(shí)候考慮是不是使用子類來(lái)實(shí)現(xiàn),乍一看似乎是比較好的,但是考慮到對(duì)窗口來(lái)說(shuō)形狀只能是它的一項(xiàng)屬性:窗口不是一“種”形狀——窗口“有”形狀。(引自《The Pragmatic Programmer》)所以采用委托的方式。
    ??? 這時(shí),我們定義一個(gè)被委托(delegatee)類Shape和一個(gè)委托(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 蘑菇 閱讀(961) 評(píng)論(3)  編輯  收藏 所屬分類: 開(kāi)發(fā)隨感

    評(píng)論

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

    加個(gè)更容易懂的例子:
    delegateA {
    delegateeB b;

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

    delegateeB {
    void methodB(delegateA a) { a.do(); }
    }   回復(fù)  更多評(píng)論   

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

    能否解釋一下上述代碼?謝謝蘑菇  回復(fù)  更多評(píng)論   

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

    A是委托類,B是被委托類。
    A調(diào)用B進(jìn)行委托,委托時(shí)A的對(duì)象傳遞給了B.
    在B中,使用了A的方法,完成了委托。  回復(fù)  更多評(píng)論   

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    其實(shí)生活很簡(jiǎn)單

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产亚洲A∨片在线观看 | 亚洲高清中文字幕免费| 免费高清av一区二区三区| 美女裸免费观看网站| 亚洲乱码中文字幕综合| 在线精品一卡乱码免费| 国产精品亚洲综合天堂夜夜| 亚洲精品一品区二品区三品区| 国产成人精品免费视频动漫| 污污的视频在线免费观看| 亚洲午夜在线电影| 免费人妻av无码专区| 午夜视频免费在线观看| 国产亚洲漂亮白嫩美女在线 | 97se亚洲综合在线| 免费很黄很色裸乳在线观看| 免费无遮挡无码永久视频| 香蕉视频免费在线播放| 亚洲一区无码中文字幕乱码| 亚洲色中文字幕无码AV| 久久WWW免费人成人片| 日本免费污片中国特一级| 老妇激情毛片免费| 亚洲人成网男女大片在线播放| 亚洲精品国产成人片| 国产日产成人免费视频在线观看| 亚洲a一级免费视频| fc2免费人成为视频| 亚洲熟女综合色一区二区三区| 亚洲日韩欧洲无码av夜夜摸| 国产高清免费的视频| 亚洲一区免费视频| 国产在线国偷精品免费看| 99亚洲男女激情在线观看| 亚洲一卡二卡三卡| 亚洲美女大bbbbbbbbb| 国产av天堂亚洲国产av天堂| 亚洲成a人在线看天堂无码| 日韩免费观看视频| 野花高清在线电影观看免费视频| 久久国产免费一区|