七大原則 依賴倒置原則

2021-10-04 21:36:32 字數 1751 閱讀 9370

依賴倒置原則(dependence inversion principle,dip)是 object mentor 公司總裁羅伯特·馬丁(robert c.martin)於 1996 年在 c++ report 上發表的文章。

依賴倒置原則的原始定義為:高層模組不應該依賴低層模組,兩者都應該依賴其抽象;抽象不應該依賴細節,細節應該依賴抽象(high level modules shouldnot depend upon low level modules.both should depend upon abstractions.abstractions should not depend upon details. details should depend upon abstractions)。其核心思想是:要面向介面程式設計,不要面向實現程式設計。

依賴倒置原則是實現開閉原則的重要途徑之一,它降低了客戶與實現模組之間的耦合。

由於在軟體設計中,細節具有多變性,而抽象層則相對穩定,因此以抽象為基礎搭建起來的架構要比以細節為基礎搭建起來的架構要穩定得多。這裡的抽象指的是介面或者抽象類,而細節是指具體的實現類。

使用介面或者抽象類的目的是制定好規範和契約,而不去涉及任何具體的操作,把展現細節的任務交給它們的實現類去完成。

依賴倒置原則的主要作用如下。

下面以「顧客購物程式」為例來說明依賴倒置原則的應用。

【例1】依賴倒置原則在「顧客購物程式」中的應用。

分析:本程式反映了 「顧客類」與「商店類」的關係。商店類中有 sell() 方法,顧客類通過該方法購物以下**定義了顧客類通過韶關** shaoguanshop 購物:

class customer

}

但是,這種設計存在缺點,如果該顧客想從另外一家商店(如婺源** wuyuanshop)購物,就要將該顧客的**修改如下:

class customer

}

顧客每更換一家商店,都要修改一次**,這明顯違背了開閉原則。存在以上缺點的原因是:顧客類設計時同具體的商店類繫結了,這違背了依賴倒置原則。解決方法是:定義「婺源**」和「韶關**」的共同介面 shop,顧客類面向該介面程式設計,其**修改如下:

class customer

}inte***ce shop

這樣,不管顧客類 customer 訪問什麼商店,或者增加新的商店,都不需要修改原有**了,其類圖如圖 1 所示。

圖1 顧客購物程式的類圖

程式**如下:

<?php 

class customer

}inte***ce shop

class shaoguanshop implements shop

}class wuyuanshop implements shop

}$customer = new customer();

$shaoguan = new shaoguanshop();

$wuyuan = new wuyuanshop();

$customer->shopping($shaoguan);

$customer->shopping($wuyuan);

輸出結果:

呼叫了韶關網點的sell方法

呼叫了婺源網點的sell方法

七大原則 開閉原則

開閉原則 open closed principle,ocp 由勃蘭特 梅耶 bertrand meyer 提出,他在 1988 年的著作 物件導向軟體構造 object oriented software construction 中提出 軟體實體應當對擴充套件開放,對修改關閉 software ...

黎克特制七大原則

1.單一職責原則 即 每乙個類都只專注於做一件事情 2.黎克特制替換原則 在對軟體功能沒有影響的前提下 子類可以替換父類出現的位置,我們就稱之為黎克特制替換原則 3.依賴倒置原則 實現盡量依賴抽象 不依賴實現 4.介面隔離原則 應當為客戶端提供盡量小的單獨介面,而不是總的大的介面 5.迪公尺特法則 ...

OOP七大原則

單一職責原則 控制類的粒度大小,將物件解耦,提高內聚性 乙個物件應該只包含單一的職責,並且該職責被完整地封裝到乙個類裡 開閉原則 對擴充套件開放,對修改關閉 即實現在不修改源 的情況下改變這個模組的行為 核心 對系統進行抽象化,並從抽象化匯出具體化 黎克特制替換原則 繼承必須確保超類所擁有的性質在子...