設計原則之迪公尺特法則

2021-10-24 01:55:27 字數 2095 閱讀 3167

定義:

乙個物件應該對其他物件有最少的了解。

什麼是朋友?

每個物件必然都會與其他物件有耦合關係,兩個物件之間的耦合就是朋友關係。這種關係的型別有組合,聚合,依賴。但是迪公尺特法則要求,只和直接朋友交流。

例項:老師讓體育委員清點班上的女生的人數。

public

class

teacher

groupleader.

countgirls

(girllist);}

}public

class

groupleader

}//只要這個物件,不要有具體的實現

public

class

girl

public

class

client

}

什麼是朋友類?

就是出現在成員變數,或者方法的輸入輸出引數中的類才叫朋友類。而這裡,girl類和teacher類不是朋友類關係,因為它沒有出現在teacher類的方法引數或者返回型別,或者成員變數中。它是區域性變數,所以它和teacher不是朋友類關係。

根據這裡的分析,發現違背了迪公尺特法則,那修改這個類。

public

class

teacher

}public

class

groupleader

public

void

countgirls()

}

public

class

client

teacher.

commond

(new

groupleader

(girllist));

}}

這樣修改後,發現teacher和groupleader是朋友類,groupleader和girl是朋友類。這也符合業務邏輯,同時也符合迪公尺特法則。

迪公尺特法則:即使是朋友類之間,也不能無話不說,無所不知。

例項:假如我們要安裝乙個軟體到pc端,安裝過程也有乙個步驟。

public

class

wizard

public

intsecond()

public

intthird()

}public

class

installsoftware}}

}}

上面的程式,是否有問題?

肯定有,試想如果把first方法的返回值改為boolean,那麼installsoftware類也要跟著改變。這兩個類的耦合關係太牢固,這樣對修改增加了極大的風險,違背了迪公尺特法則。

修改:

public

class

wizard

private

intsecond()

private

intthird()

public

void

installwizard()

}}}}

public

class

installsoftware

}

把安裝過程的三個方法,改為private修飾,提供乙個public的安裝方法。這樣解耦過後,當某個方法修改時,就變得容易許多,而installsoftware類可以沒有任何改變。

迪公尺特法則第二條,朋友間也要保持距離。

如果乙個方法放在本類中,既不增加類間關係,也不對本類產生負面影響,那就放在本類中。
總結:

迪公尺特法則滿足以上4點:

1.只和朋友交流

乙個方法盡量不引入類中不存在的物件

2.朋友間保持距離

盡量少使用public公開資訊

3.自己的就是自己的

如果乙個方法既不產生類間關係,又不對本類產生負面影響,那就放在本類中

4.謹慎使用serializable

設計原則之迪公尺特法則

設計原則之迪公尺特法則 設計原則之迪公尺特法則 如果兩個類彼此不必直接通訊,那麼著兩個類就不應當發生直接的相互作用.如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三方 這個呼叫.舉個列子來說,你要it部門的人修理機器,打 的時候問 請問是it部門嗎?這樣對方無論是it部門經理還是it部門...

設計原則之迪公尺特法則(LoD)

迪公尺特法則又叫最少知識原則 lkp 意思是乙個物件應當對其他物件盡可能少的了解。幾種表述方式 只與你直接的朋友們通訊 不要跟 陌生人 說話 每乙個軟體單位對其他的單位都只有最少的了解,這些了解僅侷限於那些與本單位密切相關的軟體單位 例項 public class someone 朋友 中間類 pu...

設計原則1 迪公尺特法則

迪公尺特法則 law of demeter 又叫作最少知識原則,最少知道原則 the least knowledge principle 乙個物件應當對其他物件有盡可能少的了解,只和朋友通訊,不和陌生人說話。英文簡寫為 lod。是 朋友 的情況 1 當前物件本身 this 2 以參量形式傳入到當前物...