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

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

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

    guangnian0412's BLOG

    Java in my life

    常用鏈接

    統(tǒng)計(jì)

    積分與排名

    我關(guān)注的Blog

    最新評(píng)論

    笛米特法則詳解(the Law of Demeter or Principle of Least Knowledge)

    ?? The Law of Demeter和 Principle of Least Knowledge講的都是一回事,是說一個(gè)軟件實(shí)體要盡可能的只與和它最近的實(shí)體進(jìn)行通訊。通常被表述為:talk only to your immediate friends ( 只和離你最近的朋友進(jìn)行交互)。?

    ?? “talk”,其實(shí)就是對(duì)象間方法的調(diào)用。這條規(guī)則表明了對(duì)象間方法調(diào)用的原則:

    (1)?????? 調(diào)用對(duì)象本身的方法;

    (2)?????? 調(diào)用通過參數(shù)傳入的對(duì)象的方法;

    (3)?????? 在方法中創(chuàng)建的對(duì)象的方法;

    (4)?????? 所包含對(duì)象的方法。

    上面的4點(diǎn)看起來有點(diǎn)別扭,下面通過一個(gè)具體的例子,就可以對(duì)上述4guideline有進(jìn)一步感性的認(rèn)識(shí):

    ?1?public?class?Car?{
    ?2???Engine?engine;
    ?3???
    ?4???public?Car()?{
    ?5?????//initialize?engine,etc.
    ?6?}
    ?7?
    ?8?public?void?start(Key?key)?{
    ?9???Doors?doors?=?new?Doors();
    10???boolean?authorized?=?key.turns();
    11???
    12???if(authorized)?{
    13?????engine.start();
    14?????updateDashboardDisplay();
    15?????doors.lock();
    16?}
    17?
    18?public?void?updateDashboardDisplay()?{
    19???//update?display
    20}
    21
    22?}

    下面對(duì)start()方法中的語(yǔ)句進(jìn)行分析:

    第10行-key.turns():符合上述的第(2)條,key對(duì)象是通過參數(shù)傳入start()方法的。

    第13行-engine.start():符合上述的第(4)條,engine對(duì)象是包含在Car的對(duì)象之中的。

    第14行-UpdateDashboardDisplay():符合上述的第(1)條,UpdateDashboardDisplay()方法是Car對(duì)像自身的方法。

    第15行-doors.lock():符合上述的第(3)條,doors對(duì)象是在start()方法中創(chuàng)建的對(duì)象。

    接下來看一個(gè)違反Principle of Least Knowledge的例子:

    1?public?float?getTemp()?{
    2???Thermometer?thermometer?=?station.getThermometer();
    3???return?thermometer.getTemperature();
    4?}

    上面的方法中station對(duì)象是immediate friends。但是上面的代碼卻從station對(duì)象中返回了一個(gè)Thermometer對(duì)象,然后調(diào)用了thermometer對(duì)象的getTemperature()方法,違反了Principle of Least Knowledge

    下面對(duì)上面的方法作出符合Principle of Least Knowledge的改進(jìn):

    1?public?float?getTemp()?{
    2???return?station.?getTemperature();
    3?}

    我們?cè)?/span>Station類中添加一個(gè)方法getTemperature()。這個(gè)方法將調(diào)用Station類中含有的Thermometer對(duì)象的getTemperature()。這樣getTemp()方法就只知道Station對(duì)象而不知道Thermometer對(duì)象。

    總結(jié):笛米特法則告訴我們要盡量只和離自己最近的對(duì)象進(jìn)行交互。離自己最近的對(duì)象包括:自身包含的對(duì)象,方法中創(chuàng)建的對(duì)象,通過參數(shù)傳進(jìn)的對(duì)象,還有自己本身。
    ?

    posted on 2006-06-19 19:44 guangnian 閱讀(4529) 評(píng)論(5)  編輯  收藏 所屬分類: OO設(shè)計(jì)原則

    評(píng)論

    # re: 笛米特法則詳解(the Law of Demeter or Principle of Least Knowledge)[未登錄] 2007-11-19 10:51 訪客

    這個(gè)還叫詳解?不要為了提高點(diǎn)擊率隨便命名,充其量也只能是實(shí)例說明。誤導(dǎo)~!  回復(fù)  更多評(píng)論   

    # re: 笛米特法則詳解(the Law of Demeter or Principle of Least Knowledge)[未登錄] 2007-12-19 17:34 abc

    介紹的也太簡(jiǎn)單了  回復(fù)  更多評(píng)論   

    # re: 笛米特法則詳解(the Law of Demeter or Principle of Least Knowledge) 2008-01-29 16:48 nf

    我以為介紹得不錯(cuò)啊,難道長(zhǎng)篇大論LS的才滿意嗎?  回復(fù)  更多評(píng)論   

    # re: 笛米特法則詳解(the Law of Demeter or Principle of Least Knowledge) 2009-07-05 14:53 fnd

    我也認(rèn)為寫的不錯(cuò),推一下  回復(fù)  更多評(píng)論   

    # re: 笛米特法則詳解(the Law of Demeter or Principle of Least Knowledge)[未登錄] 2013-10-20 18:59 andrew

    謝謝,學(xué)習(xí)了  回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费在线观看日韩| 久久精品国产亚洲AV嫖农村妇女| h视频免费高清在线观看| 亚洲VA中文字幕无码一二三区| 真人做人试看60分钟免费视频| 国产亚洲综合视频| 久久久亚洲精品无码| 成人免费看黄20分钟| 最近免费中文字幕MV在线视频3| 亚洲av永久无码嘿嘿嘿 | 国产精品亚洲mnbav网站| 青青草无码免费一二三区| 色婷婷亚洲一区二区三区| 亚洲成a人片77777kkkk| 日韩精品免费一区二区三区| A级毛片高清免费视频在线播放| 亚洲中文无码卡通动漫野外| 国产亚洲人成网站在线观看| 毛片A级毛片免费播放| AAAAA级少妇高潮大片免费看| 亚洲欧美日韩中文字幕在线一区| 亚洲啪啪AV无码片| 国产精品视_精品国产免费| 久久aa毛片免费播放嗯啊| 免费在线观看亚洲| 91亚洲精品自在在线观看| 亚洲国产精品国自产拍AV| 国产精品视_精品国产免费| 国产成人精品免费视频动漫| jyzzjyzz国产免费观看| 日韩国产欧美亚洲v片| 亚洲影视一区二区| 亚洲第一福利网站| 国产精品亚洲综合专区片高清久久久| 成人免费视频小说| 在线精品一卡乱码免费| 久久午夜羞羞影院免费观看| 97在线视频免费公开视频| 国产在亚洲线视频观看| 亚洲精品自偷自拍无码| 亚洲午夜电影在线观看高清|