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

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

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

    隨筆-95  評論-31  文章-10  trackbacks-0
    條件滿足:
    1 當前對象本身(this)
    2 以參量形式傳入到當前對象方法中的對象
    3 當前對象的實例變量直接引用的對象
    4 當前對象的實例變量如果是一個聚集,那么聚集中的元素也都是朋友
    5 當前對象所創(chuàng)建的對象
    否則就不算"朋友" 代碼需優(yōu)化重構(gòu)

    不是“朋友”的例子:
    public class SomeOne
    {
       
    public void operation(Friend friend)
       {
         Stranger stranger 
    = friend.getStranger();
         stranger.operation();
       }
    }

    friend是SomeOne的朋友,但是在operation內(nèi)部出現(xiàn)了stranger對象,它不是SomeOne的朋友,stranger.operation()方法應(yīng)該挪到friend對象內(nèi)部去,進行封裝再對SomeOne提供。
    這原則就是迪米特法則。
    優(yōu)點:降低系統(tǒng)內(nèi)部的耦合度,若修改僅僅只會影響到這個類的“朋友”們,而不會影響到當前對象。
    缺點:對象里會產(chǎn)生大量的小方法,這些方法僅僅只是傳遞間接的調(diào)用,因此與系統(tǒng)的業(yè)務(wù)邏輯無關(guān),一個小方法內(nèi),可能僅僅只是調(diào)用了關(guān)聯(lián)對象的其它方法,而且會使系統(tǒng)的不同模塊之間不容易協(xié)調(diào)。

    避免該缺點:使用依賴倒置原則,比如把上面的stranger做為抽象類,stranger.operation()是個抽象方法,通過friend.getStranger()動態(tài)返回不同具體的類,這樣仍然做到了SomeOne對象不用修改,要改也只是friend.getStranger()方法內(nèi)部返回不同的子對象即可,但是為了代碼整潔度,清晰明了,直接一個friend.operation(),感覺還是挪走比較好。

    23種模式里面:門面模式與中介者模式就是迪米特法則的應(yīng)用
    門面模式示意圖: 顯然Facade依賴各個子系統(tǒng),子系統(tǒng)可以有多個,客戶端直接與Facade打交道


    中介者模式示意圖:





    posted on 2013-09-24 15:34 朔望魔刃 閱讀(259) 評論(0)  編輯  收藏 所屬分類: 設(shè)計模式&&數(shù)據(jù)結(jié)構(gòu)
    主站蜘蛛池模板: 日本一线a视频免费观看| 自拍偷自拍亚洲精品偷一| 亚洲日本一区二区三区在线不卡| 99久久久国产精品免费蜜臀| 美女被免费网站在线视频免费| 亚洲视频免费观看| 亚洲级αV无码毛片久久精品| 国产成人青青热久免费精品| 久久精品免费全国观看国产| 久久国产乱子免费精品| 51午夜精品免费视频| 亚洲6080yy久久无码产自国产| 亚洲午夜精品在线| 亚洲天堂中文字幕| 好看的电影网站亚洲一区| 精品国产亚洲一区二区在线观看| 国产免费啪嗒啪嗒视频看看| 成人午夜免费福利| 日韩国产免费一区二区三区| 99久久精品免费精品国产| 国产偷伦视频免费观看| 国产日韩在线视频免费播放| 在线播放国产不卡免费视频| 高潮毛片无遮挡高清免费 | 成人影片一区免费观看| 日韩免费在线中文字幕| 在线看亚洲十八禁网站| 亚洲av成本人无码网站| 日韩欧美亚洲国产精品字幕久久久 | 久久国产亚洲精品麻豆| 亚洲人成精品久久久久| 亚洲精品无码AV人在线播放 | 色爽黄1000部免费软件下载| 污网站在线免费观看| 边摸边吃奶边做爽免费视频网站| 免费无码又爽又黄又刺激网站| 国产亚洲精品美女2020久久| 特级毛片aaaa免费观看| 亚洲精品视频免费观看| 天黑黑影院在线观看视频高清免费| 9久久免费国产精品特黄|