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

java面向?qū)ο笤O(shè)計原則之迪米特法則分析詳解

 更新時間:2021年10月14日 09:52:50   作者:guoyp2126  
這篇文章主要為大家介紹了java面向?qū)ο笤O(shè)計原則之迪米特法則的示例分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,學(xué)有所得

概念

迪米特法則解決類與類之間耦合度問題,如果類A調(diào)用了B類的某一個方法,則這兩個類就形成了一種緊耦合的方式,當(dāng)B類這個方法發(fā)生變化時,一定會影響A類的執(zhí)行結(jié)果。迪米特法則要求每一個類盡可能少的與其他類發(fā)生關(guān)系,也就是盡可能少的讓其他類發(fā)生變化時,對其代碼的執(zhí)行結(jié)果產(chǎn)生的影響降到最低。

典型情況:A類調(diào)用B類的方法,B類和C類是一種關(guān)聯(lián)關(guān)系,如果A類通過B類所持有的C類對象直接調(diào)用C類的方法,則A類和C類同時擁有強耦合的關(guān)系。代碼如下:

public class B {
    public C c = new C();
}
public class C {
    public void fun()
    {
        //相關(guān)代碼
    }
}
public class A {
    public void show(){
        B b = new B();
        b.c.fun();
    }
}

這種調(diào)用A和C之間形成一種強耦合,當(dāng)C中fun代碼發(fā)生變化時,一定會影響到A,不符合迪米特法則。按照迪米特法則的要求可修改為:

public class B {
    private C c = new C();
    public void fun(){
       c.fun(); 
    }
}
public class A {
    public void show(){
        B b = new B();
        b.fun();
    }
}

A和C代碼完全脫耦,當(dāng)C的fun代碼發(fā)生變化時,只需要修改類B中fun代碼;當(dāng)A中業(yè)務(wù)邏輯發(fā)生變化時,需要修改B中fun代碼,也只需修改B中代碼,和C中代碼無關(guān)。
迪米特法則又叫做最少知識原則(LKP),就是說,一個對象應(yīng)當(dāng)對其他對象有盡可能少的了解。通俗的講“不和陌生人講話,只和朋友交流”,上述示例中類A和類B是朋友,和類C是陌生人。

使用

迪米特法則解決了類之間耦合度問題,使得類與類之間的接口通訊變得簡單,提高了可維護(hù)性,但同時也增加了調(diào)用層次和復(fù)雜度。但以下情況一定要使用迪米特法則規(guī)避風(fēng)險。

1.使用第三方組件或者控件時,增加一個包裝器的類,使得調(diào)用方和第三方組件完全脫耦,如桌面程序中使用XP style一組控件屬于第三方控件,每個控件增加一個包裝器類,無論什么時間,XP style控件不能使用時,如:免費突然變收費,我們只需要修改包裝器類中代碼即可。

2.對于預(yù)期會發(fā)生較大變化的模塊,增加一個外觀層,簡化和穩(wěn)定高層模塊的調(diào)用關(guān)系,與不穩(wěn)定部分脫耦。

3.對付團隊新成員或代碼質(zhì)量較差程序員,增加一個外觀層,避免因頻繁的修改,造成整個程序掛掉。

拓展

1.意思就是降低各個對象之間的耦合,提高系統(tǒng)的可維護(hù)性;

2.迪米特法則是一種設(shè)計思想,不僅僅體現(xiàn)在對象與對象的之間的耦合度問題上,而是廣泛應(yīng)用到各種分層結(jié)構(gòu)中層與層之間的關(guān)系,每個層之間形成一種隔離關(guān)系,調(diào)用無需了解層內(nèi)部及更下一級層的調(diào)用關(guān)系。如MVP模式,P將M和V結(jié)合起來,使得M和V都可以獨立的進(jìn)行變化,任何一方的變化僅影響到P層代碼的變化。

3.前端開發(fā)時使用獨立出來的API就是迪米特法則的要求,如:

 var api = {
   adminLogin: (param) => post(apiBase+"/sys/login", param),
   userLogin: (param) => post(apiBase+"/sys/weblogin", param),
   }

頁面調(diào)用時只需要調(diào)用api中定義的adminLogin方法,當(dāng)后端定義的路勁名apiBase、方法名login發(fā)生變化時,只修改api即可,不會影響到調(diào)用頁面的代碼
4. 設(shè)計模式中對象適配器、代理模式、門面模式等均體現(xiàn)了迪米特法則的思想。

以上就是java面向?qū)ο笤O(shè)計原則之迪米特法則分析詳解的詳細(xì)內(nèi)容,更多關(guān)于java面向?qū)ο笤O(shè)計原則的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一篇文章帶你入門java泛型

    一篇文章帶你入門java泛型

    這篇文章主要介紹了java泛型基礎(chǔ)知識及通用方法,從以下幾個方面介紹一下java的泛型: 基礎(chǔ), 泛型關(guān)鍵字, 泛型方法, 泛型類和接口,感興趣的可以了解一下
    2021-08-08
  • JavaWeb通過IDEA配置Servlet操作流程詳解

    JavaWeb通過IDEA配置Servlet操作流程詳解

    這篇文章主要介紹了JavaWeb通過IDEA配置Servlet實現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • java 中file.encoding的設(shè)置詳解

    java 中file.encoding的設(shè)置詳解

    這篇文章主要介紹了java 中file.encoding的設(shè)置詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • SpringBoot使用Druid數(shù)據(jù)源的配置方法

    SpringBoot使用Druid數(shù)據(jù)源的配置方法

    這篇文章主要介紹了SpringBoot使用Druid數(shù)據(jù)源的配置方法,文中代碼實例相結(jié)合的形式給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2018-04-04
  • Java基于Servlet和JSP實現(xiàn)登錄功能

    Java基于Servlet和JSP實現(xiàn)登錄功能

    在 Web 開發(fā)中,用戶登錄功能是非常常見的模塊之一,本文將通過使用 Java Servlet 和 JSP 實現(xiàn)一個簡單的用戶登錄功能,展示如何創(chuàng)建登錄頁面、處理用戶登錄請求,并使用數(shù)據(jù)庫驗證用戶信息,需要的朋友可以參考下
    2024-11-11
  • 如何在java中使用SFTP協(xié)議安全的傳輸文件

    如何在java中使用SFTP協(xié)議安全的傳輸文件

    這篇文章主要介紹了如何在java中使用SFTP協(xié)議安全的傳輸文件,幫助大家更好的理解和使用JSch,感興趣的朋友可以了解下
    2020-10-10
  • Spring IOC裝配Bean過程解析

    Spring IOC裝配Bean過程解析

    這篇文章主要介紹了Spring IOC裝配Bean過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot如何使用注解進(jìn)行XSS防御

    SpringBoot如何使用注解進(jìn)行XSS防御

    在SpringBoot中,可以通過自定義@XSS注解和實現(xiàn)XSSValidator類來防御XSS攻擊,此方法適用于GET和POST請求,通過在方法參數(shù)或?qū)嶓w類屬性上添加@XSS注解,并結(jié)合@Valid或@Validated注解使用,有效攔截潛在的XSS腳本,保障應(yīng)用安全
    2024-11-11
  • SpringBoot項目的測試類實例解析

    SpringBoot項目的測試類實例解析

    這篇文章主要介紹了SpringBoot項目的測試類實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Java中的clone方法實例詳解

    Java中的clone方法實例詳解

    這篇文章主要介紹了Java中的clone方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01

最新評論

九寨沟县| 沙雅县| 武平县| 扎囊县| 长宁区| 洛川县| 万载县| 临猗县| 福鼎市| 卫辉市| 荔浦县| 高阳县| 达拉特旗| 厦门市| 九江县| 南通市| 马鞍山市| 大余县| 汤原县| 天津市| 昭苏县| 故城县| 察隅县| 天峻县| 彩票| 许昌县| 乌兰浩特市| 万盛区| 庆阳市| 开化县| 水富县| 荣成市| 根河市| 永寿县| 理塘县| 长治市| 渑池县| 米泉市| 抚宁县| 克山县| 武城县|