中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

設計模式六大原則(5):迪米特法則
來源:易賢網 閱讀:1453 次 日期:2015-04-02 12:58:38
溫馨提示:易賢網小編為您整理了“設計模式六大原則(5):迪米特法則”,方便廣大網友查閱!

定義:一個對象應該對其他對象保持最少的了解。

問題由來:類與類之間的關系越密切,耦合度越大,當一個類發生改變時,對另一個類的影響也越大。

解決方案:盡量降低類與類之間的耦合。

自從我們接觸編程開始,就知道了軟件編程的總的原則:低耦合,高內聚。無論是面向過程編程還是面向對象編程,只有使各個模塊之間的耦合盡量的低,才能提高代碼的復用率。低耦合的優點不言而喻,但是怎么樣編程才能做到低耦合呢?那正是迪米特法則要去完成的。

迪米特法則又叫最少知道原則,最早是在1987年由美國Northeastern University的Ian Holland提出。通俗的來講,就是一個類對自己依賴的類知道的越少越好。也就是說,對于被依賴的類來說,無論邏輯多么復雜,都盡量地的將邏輯封裝在類的內部,對外除了提供的public方法,不對外泄漏任何信息。迪米特法則還有一個更簡單的定義:只與直接的朋友通信。首先來解釋一下什么是直接的朋友:每個對象都會與其他對象有耦合關系,只要兩個對象之間有耦合關系,我們就說這兩個對象之間是朋友關系。耦合的方式很多,依賴、關聯、組合、聚合等。其中,我們稱出現成員變量、方法參數、方法返回值中的類為直接的朋友,而出現在局部變量中的類則不是直接的朋友。也就是說,陌生的類最好不要作為局部變量的形式出現在類的內部。

舉一個例子:有一個集團公司,下屬單位有分公司和直屬部門,現在要求打印出所有下屬單位的員工ID。先來看一下違反迪米特法則的設計。

//總公司員工

class Employee{

private String id;

public void setId(String id){

this.id = id;

}

public String getId(){

return id;

}

}

//分公司員工

class SubEmployee{

private String id;

public void setId(String id){

this.id = id;

}

public String getId(){

return id;

}

}

class SubCompanyManager{

public List<SubEmployee> getAllEmployee(){

List<SubEmployee> list = new ArrayList<SubEmployee>();

for(int i=0; i<100; i++){

SubEmployee emp = new SubEmployee();

//為分公司人員按順序分配一個ID

emp.setId("分公司"+i);

list.add(emp);

}

return list;

}

}

class CompanyManager{

public List<Employee> getAllEmployee(){

List<Employee> list = new ArrayList<Employee>();

for(int i=0; i<30; i++){

Employee emp = new Employee();

//為總公司人員按順序分配一個ID

emp.setId("總公司"+i);

list.add(emp);

}

return list;

}

public void printAllEmployee(SubCompanyManager sub){

List<SubEmployee> list1 = sub.getAllEmployee();

for(SubEmployee e:list1){

System.out.println(e.getId());

}

List<Employee> list2 = this.getAllEmployee();

for(Employee e:list2){

System.out.println(e.getId());

}

}

}

public class Client{

public static void main(String[] args){

CompanyManager e = new CompanyManager();

e.printAllEmployee(new SubCompanyManager());

}

}

現在這個設計的主要問題出在CompanyManager中,根據迪米特法則,只與直接的朋友發生通信,而SubEmployee類并不是CompanyManager類的直接朋友(以局部變量出現的耦合不屬于直接朋友),從邏輯上講總公司只與他的分公司耦合就行了,與分公司的員工并沒有任何聯系,這樣設計顯然是增加了不必要的耦合。按照迪米特法則,應該避免類中出現這樣非直接朋友關系的耦合。修改后的代碼如下:

class SubCompanyManager{

public List<SubEmployee> getAllEmployee(){

List<SubEmployee> list = new ArrayList<SubEmployee>();

for(int i=0; i<100; i++){

SubEmployee emp = new SubEmployee();

//為分公司人員按順序分配一個ID

emp.setId("分公司"+i);

list.add(emp);

}

return list;

}

public void printEmployee(){

List<SubEmployee> list = this.getAllEmployee();

for(SubEmployee e:list){

System.out.println(e.getId());

}

}

}

class CompanyManager{

public List<Employee> getAllEmployee(){

List<Employee> list = new ArrayList<Employee>();

for(int i=0; i<30; i++){

Employee emp = new Employee();

//為總公司人員按順序分配一個ID

emp.setId("總公司"+i);

list.add(emp);

}

return list;

}

public void printAllEmployee(SubCompanyManager sub){

sub.printEmployee();

List<Employee> list2 = this.getAllEmployee();

for(Employee e:list2){

System.out.println(e.getId());

}

}

}

修改后,為分公司增加了打印人員ID的方法,總公司直接調用來打印,從而避免了與分公司的員工發生耦合。

迪米特法則的初衷是降低類之間的耦合,由于每個類都減少了不必要的依賴,因此的確可以降低耦合關系。但是凡事都有度,雖然可以避免與非直接的類通信,但是要通信,必然會通過一個“中介”來發生聯系,例如本例中,總公司就是通過分公司這個“中介”來與分公司的員工發生聯系的。過分的使用迪米特原則,會產生大量這樣的中介和傳遞類,導致系統復雜度變大。所以在采用迪米特法則時要反復權衡,既做到結構清晰,又要高內聚低耦合。

更多信息請查看IT技術專欄

更多信息請查看技術文章
易賢網手機網站地址:設計模式六大原則(5):迪米特法則
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
99国产精品久久久久老师| 一区二区高清视频| 一区二区毛片| 黑人中文字幕一区二区三区| 欧美日韩dvd在线观看| 欧美激情自拍| 欧美午夜视频| 国产欧美一区二区三区久久 | 欧美国产综合| 欧美国产视频在线观看| 欧美日韩福利| 国产精品扒开腿做爽爽爽视频| 国产精品久久看| 亚洲国产精品久久精品怡红院| 亚洲人成小说网站色在线| 欧美一级淫片aaaaaaa视频| 久久综合九色综合欧美就去吻| 国产精品视频观看| 亚洲人成网站影音先锋播放| 久久av一区二区| 夜夜爽99久久国产综合精品女不卡| 亚洲国产欧美一区二区三区久久| 亚洲高清久久久| 久久久亚洲精品一区二区三区 | 欧美精品一区二区三区视频| 国产免费成人在线视频| 日韩一区二区精品视频| 久久国产天堂福利天堂| 欧美三级精品| 亚洲综合清纯丝袜自拍| 国产精品毛片在线看| 亚洲自拍高清| 国产精品无码永久免费888| 久久国产精品免费一区| 欧美色播在线播放| 亚洲网站在线观看| 国产精品人人做人人爽| 亚洲专区一区| 国产在线欧美| 欧美精品导航| 久久人体大胆视频| 一本久久a久久精品亚洲| 国产精品乱码久久久久久| 免费av成人在线| 亚洲视频在线看| 亚洲国产一区在线| 国产一区二区黄| 国产精品99免视看9| 久久免费的精品国产v∧| 亚洲一区二区在线看| 亚洲精品极品| 在线国产亚洲欧美| 国产精品美女久久久| 欧美日韩国产大片| 欧美精品在线极品| 欧美激情久久久久久| 欧美91福利在线观看| 久久人人97超碰精品888| 欧美一区二区在线免费播放| 亚洲视频在线观看免费| 一区二区三区www| 夜夜嗨av一区二区三区免费区| 永久555www成人免费| 国内精品久久久| 狠狠入ady亚洲精品| 亚洲第一搞黄网站| 亚洲黄色影片| 中国日韩欧美久久久久久久久| 日韩天天综合| 亚洲婷婷在线| 欧美在线视频网站| 久久久久综合网| 欧美黄网免费在线观看| 国产精品国产三级国产aⅴ无密码| 欧美视频手机在线| 国产亚洲激情在线| 亚洲国产一区在线观看| 一区二区毛片| 久久久一本精品99久久精品66| 久久精品免费电影| 欧美欧美在线| 激情欧美一区| 亚洲男人av电影| 欧美精品午夜| 国产一区二区成人| 9i看片成人免费高清| 久久人人97超碰精品888| 欧美精品在线视频| 国产偷久久久精品专区| 一本久久a久久精品亚洲| 美日韩精品免费观看视频| 国产精品久久久久天堂| 亚洲三级视频| 久久精品成人一区二区三区| 欧美另类视频| 亚洲三级电影全部在线观看高清| 久久国产欧美日韩精品| 国产精品一区二区在线| 亚洲桃花岛网站| 欧美日韩一区二区三区在线观看免 | 欧美一区综合| 国产日韩欧美夫妻视频在线观看| 亚洲美女区一区| 欧美精品久久一区| 亚洲一区视频在线| 欧美激情综合五月色丁香| 在线观看免费视频综合| 久久精品国产综合精品| 黄色成人av| 欧美成人精品在线观看| 亚洲久久在线| 欧美午夜免费电影| 亚洲欧美日本精品| 国产精品一区二区你懂的| 亚洲免费影视| 国产视频欧美| 毛片av中文字幕一区二区| 在线日韩中文| 欧美精品少妇一区二区三区| 亚洲国产成人精品久久| 欧美日韩在线三区| 久久不射2019中文字幕| 日韩午夜在线观看视频| 国产精品久久久久久久午夜| 久久精品99无色码中文字幕| 亚洲高清不卡在线| 国产情侣久久| 欧美国产一区二区| 亚洲成人在线| 亚洲一区视频在线| 欧美日韩亚洲综合| 欧美日韩日本网| 欧美亚洲第一区| 国产视频久久久久| 激情久久五月| 国产亚洲精品7777| 欧美日韩美女一区二区| 麻豆久久精品| 久久精品欧洲| 欧美一级片久久久久久久| 日韩视频在线一区二区| 一区二区在线看| 国产欧美91| 国产精品亚洲综合久久| 国产精品美女久久久久久久 | 欧美成人在线网站| 蜜臀a∨国产成人精品| 久久亚洲春色中文字幕| 免费观看久久久4p| 欧美日韩亚洲另类| 麻豆精品在线视频| 国产精品www.| 一区二区亚洲| 亚洲精品视频免费| 一区二区三区精品视频在线观看| 亚洲精品看片| 欧美一级久久久| 久久亚洲二区| 国产精品伦子伦免费视频| 国产精品嫩草久久久久| 在线观看三级视频欧美| 亚洲精品1区| 久久久青草婷婷精品综合日韩| 蜜臀久久久99精品久久久久久 | 国产欧美日韩一区二区三区在线观看| 国产日韩欧美中文| 日韩午夜中文字幕| 免费成人黄色av| 狠狠色综合色区| 久久久久久9| 国产日韩欧美91| 亚洲综合久久久久| 美女999久久久精品视频| 国产综合一区二区| 亚洲精品黄网在线观看| 欧美成va人片在线观看| 国产日韩欧美高清| 欧美风情在线| 亚洲免费一级电影| 亚洲免费中文| 99热这里只有成人精品国产| 亚洲一区视频| 国产精品视频999| 亚洲小视频在线观看| 欧美日韩国产va另类| 国产精品99久久久久久久vr| 欧美精品在线看| 一区二区三区不卡视频在线观看 | 毛片一区二区| 两个人的视频www国产精品| 久久福利毛片| 免费一级欧美片在线观看| 午夜影院日韩| 午夜精品久久久久久久久久久久| 亚洲午夜免费视频| 亚洲一区二区精品| 亚洲永久免费| 亚洲一区日本| 黄色精品一区二区| 亚洲色诱最新|