定義:什麼是朋友?乙個物件應該對其他物件有最少的了解。
每個物件必然都會與其他物件有耦合關係,兩個物件之間的耦合就是朋友關係。這種關係的型別有組合,聚合,依賴。但是迪公尺特法則要求,只和直接朋友交流。
例項:老師讓體育委員清點班上的女生的人數。
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 以參量形式傳入到當前物...