全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

迪米特法則模式:迪米特法則通俗理解

更新時(shí)間:2021-08-19 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

在軟件開(kāi)發(fā)中,為了提高軟件系統(tǒng)的可維護(hù)性和可復(fù)用性,增加軟件的可擴(kuò)展性和靈活性,程序員要盡量根據(jù)6條原則來(lái)開(kāi)發(fā)程序,從而提高軟件開(kāi)發(fā)效率、節(jié)約軟件開(kāi)發(fā)成本和維護(hù)成本。這六條分別是開(kāi)閉原則、里氏代換原則、依賴(lài)倒轉(zhuǎn)原則、接口隔離原則、迪米特法則、合成復(fù)用原則,下面主要介紹里迪米特法則。

迪米特法則又叫最少知識(shí)原則。

只和你的直接朋友交談,不跟“陌生人”說(shuō)話(huà)(Talk only to your immediate friends and not to strangers)。

其含義是:如果兩個(gè)軟件實(shí)體無(wú)須直接通信,那么就不應(yīng)當(dāng)發(fā)生直接的相互調(diào)用,可以通過(guò)第三方轉(zhuǎn)發(fā)該調(diào)用。其目的是降低類(lèi)之間的耦合度,提高模塊的相對(duì)獨(dú)立性。

迪米特法則中的“朋友”是指:當(dāng)前對(duì)象本身、當(dāng)前對(duì)象的成員對(duì)象、當(dāng)前對(duì)象所創(chuàng)建的對(duì)象、當(dāng)前對(duì)象的方法參數(shù)等,這些對(duì)象同當(dāng)前對(duì)象存在關(guān)聯(lián)、聚合或組合關(guān)系,可以直接訪(fǎng)問(wèn)這些對(duì)象的方法。

下面看一個(gè)例子來(lái)理解迪米特法則

【例】明星與經(jīng)紀(jì)人的關(guān)系實(shí)例

明星由于全身心投入藝術(shù),所以許多日常事務(wù)由經(jīng)紀(jì)人負(fù)責(zé)處理,如和粉絲的見(jiàn)面會(huì),和媒體公司的業(yè)務(wù)洽淡等。這里的經(jīng)紀(jì)人是明星的朋友,而粉絲和媒體公司是陌生人,所以適合使用迪米特法則。

類(lèi)圖如下:

迪米特法則

代碼如下:

明星類(lèi)(Star)

public class Star {
    private String name;

    public Star(String name) {
        this.name=name;
    }

    public String getName() {
        return name;
    }
}

粉絲類(lèi)(Fans)

public class Fans {
    private String name;

    public Fans(String name) {
        this.name=name;
    }

    public String getName() {
        return name;
    }
}

媒體公司類(lèi)(Company)

public class Company {
    private String name;

    public Company(String name) {
        this.name=name;
    }

    public String getName() {
        return name;
    }
}

經(jīng)紀(jì)人類(lèi)(Agent)

public class Agent {
    private Star star;
    private Fans fans;
    private Company company;

    public void setStar(Star star) {
        this.star = star;
    }

    public void setFans(Fans fans) {
        this.fans = fans;
    }

    public void setCompany(Company company) {
        this.company = company;
    }

    public void meeting() {
        System.out.println(fans.getName() + "與明星" + star.getName() + "見(jiàn)面了。");
    }

    public void business() {
        System.out.println(company.getName() + "與明星" + star.getName() + "洽淡業(yè)務(wù)。");
    }
}


猜你喜歡:

MySQL和Oracle的區(qū)別

CentOS 下安裝oracle數(shù)據(jù)庫(kù)圖文教程

Java swing是什么?有什么作用?

Java集合的分類(lèi)有哪些?

黑馬程序員java開(kāi)發(fā)培訓(xùn)課程

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!