最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

理解Java設(shè)計(jì)模式編程中的迪米特原則

 更新時(shí)間:2016年02月03日 14:18:19   作者:lixiang0522  
這篇文章主要介紹了Java設(shè)計(jì)模式編程中的迪米特原則,迪米特原則旨在降低類與類之間的耦合,需要的朋友可以參考下

定義:一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象保持最少的了解。
問題由來:類與類之間的關(guān)系越密切,耦合度越大,當(dāng)一個(gè)類發(fā)生改變時(shí),對(duì)另一個(gè)類的影響也越大。
解決方案:盡量降低類與類之間的耦合。
         自從我們接觸編程開始,就知道了軟件編程的總的原則:低耦合,高內(nèi)聚。無論是面向過程編程還是面向?qū)ο缶幊?,只有使各個(gè)模塊之間的耦合盡量的低,才能提高代碼的復(fù)用率。低耦合的優(yōu)點(diǎn)不言而喻,但是怎么樣編程才能做到低耦合呢?那正是迪米特法則要去完成的。
         迪米特法則又叫最少知道原則,最早是在1987年由美國(guó)Northeastern University的Ian Holland提出。通俗的來講,就是一個(gè)類對(duì)自己依賴的類知道的越少越好。也就是說,對(duì)于被依賴的類來說,無論邏輯多么復(fù)雜,都盡量地的將邏輯封裝在類的內(nèi)部,對(duì)外除了提供的public方法,不對(duì)外泄漏任何信息。迪米特法則還有一個(gè)更簡(jiǎn)單的定義:只與直接的朋友通信。首先來解釋一下什么是直接的朋友:每個(gè)對(duì)象都會(huì)與其他對(duì)象有耦合關(guān)系,只要兩個(gè)對(duì)象之間有耦合關(guān)系,我們就說這兩個(gè)對(duì)象之間是朋友關(guān)系。耦合的方式很多,依賴、關(guān)聯(lián)、組合、聚合等。其中,我們稱出現(xiàn)成員變量、方法參數(shù)、方法返回值中的類為直接的朋友,而出現(xiàn)在局部變量中的類則不是直接的朋友。也就是說,陌生的類最好不要作為局部變量的形式出現(xiàn)在類的內(nèi)部。

下面是一個(gè)違反迪米特原則的例子:

public class Teacher { 
 public void teach(Classes classes){ 
  classes.getStudents.getScore.show(); 
 } 
} 


存在什么問題呢?耦合性太高。
1. Student 類中可能會(huì)取消Score類。
2. Score類的show方法也可能會(huì)被刪除。
Student類,Score類對(duì)于你來說都是陌生的,當(dāng)他們改變時(shí),你可能都不知道。
我們可以修改成:

public class Teacher { 
 public void teach(Classes classes){ 
  classes.showScore(); 
 } 
} 
 
public class Classes { 
 public void showScore(Student student){ 
  student.showScore(); 
 } 
} 
 
public class Student { 
 Score score; 
 public void showScore(){ 
  score = new Score(80); 
  score.show(); 
 } 
} 


總結(jié):
1. 迪米特法則的優(yōu)點(diǎn)在于降低類之間的耦合。
2. 缺點(diǎn)是會(huì)產(chǎn)生比較多的小方法,讓系統(tǒng)變得比較凌亂,而且通信效率會(huì)降低。
3. 設(shè)計(jì)模式中的應(yīng)用:門面模式(Facade Pattern)和中介模式(Mediator Pattern)。

相關(guān)文章

  • Java兩種動(dòng)態(tài)代理JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理詳解

    Java兩種動(dòng)態(tài)代理JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理詳解

    這篇文章主要介紹了Java兩種動(dòng)態(tài)代理JDK動(dòng)態(tài)代理和CGLIB動(dòng)態(tài)代理詳解,代理模式是23種設(shè)計(jì)模式的一種,他是指一個(gè)對(duì)象A通過持有另一個(gè)對(duì)象B,可以具有B同樣的行為的模式,為了對(duì)外開放協(xié)議,B往往實(shí)現(xiàn)了一個(gè)接口,A也會(huì)去實(shí)現(xiàn)接口,需要的朋友可以參考下
    2023-11-11
  • SpringMvc請(qǐng)求處理參數(shù)?和?響應(yīng)數(shù)據(jù)處理的示例詳解

    SpringMvc請(qǐng)求處理參數(shù)?和?響應(yīng)數(shù)據(jù)處理的示例詳解

    這篇文章主要介紹了SpringMvc請(qǐng)求處理參數(shù)和響應(yīng)數(shù)據(jù)處理,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)機(jī)器人行走

    java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)機(jī)器人行走

    這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)機(jī)器人行走,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Mybatis plus邏輯刪除失敗的BUG操作

    Mybatis plus邏輯刪除失敗的BUG操作

    這篇文章主要介紹了Mybatis plus邏輯刪除失敗的BUG操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Java的AQS基本原理詳細(xì)分析

    Java的AQS基本原理詳細(xì)分析

    這篇文章主要介紹了Java的AQS基本原理詳細(xì)分析,AQS是Abstract Queued Synchronizer的簡(jiǎn)稱,AQS提供了一種實(shí)現(xiàn)阻塞鎖和一系列依賴FIFO等待隊(duì)列的同步器的框架,本文主要講解分析其基本原理,需要的朋友可以參考下
    2024-01-01
  • Springboot+Shiro記錄用戶登錄信息并獲取當(dāng)前登錄用戶信息的實(shí)現(xiàn)代碼

    Springboot+Shiro記錄用戶登錄信息并獲取當(dāng)前登錄用戶信息的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Springboot+Shiro記錄用戶登錄信息,并獲取當(dāng)前登錄用戶信息,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java基礎(chǔ)學(xué)習(xí)之方法的重載知識(shí)總結(jié)

    Java基礎(chǔ)學(xué)習(xí)之方法的重載知識(shí)總結(jié)

    今天帶大家來回顧Java基礎(chǔ)知識(shí),文中對(duì)Java方法的重載相關(guān)知識(shí)作了非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • java的泛型你真的了解嗎

    java的泛型你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了java的泛型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Mybatis返回int或者Integer類型報(bào)錯(cuò)的解決辦法

    Mybatis返回int或者Integer類型報(bào)錯(cuò)的解決辦法

    這篇文章主要介紹了Mybatis返回int或者Integer類型報(bào)錯(cuò)的解決辦法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • Java多種方法實(shí)現(xiàn)合并多個(gè)list對(duì)象列表

    Java多種方法實(shí)現(xiàn)合并多個(gè)list對(duì)象列表

    Java編程中,合并多個(gè)列表對(duì)象可以通過Stream?API或傳統(tǒng)循環(huán)方式實(shí)現(xiàn),使用Stream?API合并時(shí),利用flatMap方法將嵌套的List展平,再通過collect方法收集成一個(gè)新的列表,傳統(tǒng)循環(huán)則通過創(chuàng)建一個(gè)空的ArrayList,并通過遍歷每個(gè)列表將元素添加進(jìn)去
    2024-09-09

最新評(píng)論

孟津县| 白城市| 桐乡市| 杂多县| 沙坪坝区| 荣昌县| 高陵县| 盐山县| 栖霞市| 射阳县| 泸溪县| 台中县| 当涂县| 棋牌| 巴塘县| 阳谷县| 年辖:市辖区| 襄城县| 新营市| 饶河县| 阿拉善盟| 沙雅县| 深泽县| 买车| 兴隆县| 房产| 临清市| 德兴市| 胶南市| 阿鲁科尔沁旗| 铁岭市| 镇赉县| 湘潭县| 乌审旗| 洛浦县| 灯塔市| 渝中区| 巴马| 常熟市| 乐至县| 乌兰县|