<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

    常用鏈接

    統計

    積分與排名

    我關注的Blog

    最新評論

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

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

    ?? “talk”,其實就是對象間方法的調用。這條規則表明了對象間方法調用的原則:

    (1)?????? 調用對象本身的方法;

    (2)?????? 調用通過參數傳入的對象的方法;

    (3)?????? 在方法中創建的對象的方法;

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

    上面的4點看起來有點別扭,下面通過一個具體的例子,就可以對上述4guideline有進一步感性的認識:

    ?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?}

    下面對start()方法中的語句進行分析:

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

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

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

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

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

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

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

    下面對上面的方法作出符合Principle of Least Knowledge的改進:

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

    我們在Station類中添加一個方法getTemperature()。這個方法將調用Station類中含有的Thermometer對象的getTemperature()。這樣getTemp()方法就只知道Station對象而不知道Thermometer對象。

    總結:笛米特法則告訴我們要盡量只和離自己最近的對象進行交互。離自己最近的對象包括:自身包含的對象,方法中創建的對象,通過參數傳進的對象,還有自己本身。
    ?

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

    評論

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

    這個還叫詳解?不要為了提高點擊率隨便命名,充其量也只能是實例說明。誤導~!  回復  更多評論   

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

    介紹的也太簡單了  回復  更多評論   

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

    我以為介紹得不錯啊,難道長篇大論LS的才滿意嗎?  回復  更多評論   

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

    我也認為寫的不錯,推一下  回復  更多評論   

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

    謝謝,學習了  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 久久精品无码专区免费青青| 无限动漫网在线观看免费| 免费亚洲视频在线观看| 亚洲欧洲日韩国产一区二区三区| 99久久国产免费中文无字幕| 亚洲人成影院在线| 亚欧免费视频一区二区三区| 四虎影视免费在线| 亚洲va中文字幕| 亚洲av午夜精品一区二区三区| 一本一道dvd在线观看免费视频| 久久亚洲国产精品五月天婷| 在线视频网址免费播放| 亚洲av永久无码制服河南实里| 久久久国产精品福利免费| 内射少妇36P亚洲区| 在线v片免费观看视频| 亚洲av无码片vr一区二区三区| 一区二区三区亚洲视频| 亚洲youjizz| 日韩一级在线播放免费观看| 看成年女人免费午夜视频| 亚洲日韩精品一区二区三区无码 | 免费看国产成年无码AV片| 亚洲AV成人一区二区三区在线看 | 最近中文字幕无免费视频| 99亚洲乱人伦aⅴ精品| 亚洲日产韩国一二三四区| 久久久久久久久久国产精品免费| 亚洲精品福利网泷泽萝拉| 国产无遮挡裸体免费视频在线观看 | 亚洲精品无码高潮喷水A片软| 中文字幕免费在线观看| 亚洲国产日韩综合久久精品| 亚洲一区二区三区国产精品| 国产精品亚洲精品爽爽| 亚洲va久久久噜噜噜久久狠狠| 啦啦啦高清视频在线观看免费| 一级特黄a免费大片| 亚洲午夜国产精品无卡| 免费中文字幕不卡视频|